Кнопка Android textAppearance

Я могу изменить внешний вид текста кнопки, установив его прямо в объекте, как это:

<Button
        android:id="@+id/login_btn_bypass"
        android:textSize="15dp"
        android:textColor="#878787"
        android:textStyle="bold" />

но не при использовании textAppearance в style

// in layout xml
<Button
    android:id="@+id/login_btn_login"
    android:textAppearance="@style/login_button_text_appearance" />

// in style definition 
<style name="login_button_text_appearance">
    <item name="android:textSize">15dp</item>
    <item name="android:textColor">#a7a7a7</item>
    <item name="android:textStyle">bold</item>
</style>

кто-нибудь знает почему?

2 ответов


Я думаю, вы должны использовать :

style = "@style/login_button_text_appearance"

вместо

android:textAppearance="@style/login_button_text_appearance"

на android:textAppearance - это просто атрибут, как и любой другой атрибут ( android:textSize,android:textStyle...etc), и значение стиля неприемлемо в качестве значения для этого атрибута

EDIT:

<Button
    android:id="@+id/login_btn_login"
    style="@style/login_button_text_appearance" />

значения атрибутов, определенные с помощью textAppearance, применяются перед значениями атрибутов в стиле. А Button Это TextView с примененным стилем, и стиль по умолчанию кнопки переопределит ваш textAppearance (Android 2.3, например, установит его ?android: attr / textAppearanceSmallInverse) и textColor.

textAppearance исключает стили в качестве значений,android:textAppearance="@style/login_button_text_appearance" обычно правильный способ установить textAppearance, но не для Button:

если вы меняете цвет текста Button, вы также должны применить пользовательское фоновое изображение, потому что если вы этого не сделаете, одно устройство будет использовать темное фоновое изображение (motorola defy), а другое-светлое изображение (htc desire), которое может затруднить чтение текста.