The style-defined TextColor applies to the TextView, but not the Button?

I have defined some style resources that include TextAppearance with a specific TextColor. Then I apply styles to some TextViews and buttons. All styles go through a TextView, but not a Button. For some reason, the textColor attribute is not displayed. Is this a mistake, or am I missing something in the case of a button?

Here is a style definition:

<?xml version="1.0" encoding="UTF-8"?> <resources> <style name="TestApp"> </style> <!-- Text Appearances --> <style name="TestApp.TextAppearance"> <item name="android:typeface">sans</item> <item name="android:textStyle">bold</item> <item name="android:textSize">16px</item> <item name="android:textColor">#6666FF</item> </style> <!-- Widget Styles --> <style name="TestApp.Widget"> <item name="android:layout_margin">3sp</item> </style> <style name="TestApp.Widget.Label"> <item name="android:textAppearance">@style/TestApp.TextAppearance</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> </style> <style name="TestApp.Widget.Switch"> <item name="android:textAppearance">@style/TestApp.TextAppearance</item> <item name="android:layout_width">100px</item> <item name="android:layout_height">100px</item> </style> </resources> 

and here is the layout where I try to apply them:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView style="@style/TestApp.Widget.Label" android:text="This is my label." /> <TextView style="@style/TestApp.Widget.Label" android:text="This is my disabled label." android:enabled="false" /> <Button style="@style/TestApp.Widget.Switch" android:text="This is my switch." /> <Button style="@style/TestApp.Widget.Switch" android:text="This is my disabled switch." android:enabled="false" /> </LinearLayout> 
+6
android
source share
3 answers

Apparently the way to achieve this is to override the button-style textColor attribute. Android does it this way in its global theme styles:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/styles.xml

I would like to understand why this is so.

+2
source share

In the case of buttons, there are two ways to determine the color of text through attributes: textColor and through the style defined by textAppearance .

The value set by textColor (which is set by default) will override any text color value specified by the textAppearance style. Therefore, you must set the textColor attribute to @null one of two ways.

  • Set textColor to @null in style:

     <style name="Application.Button"> <item name="android:textAppearance">@style/Application.Text.Medium.White</item> <item name="android:textColor">@null</item> </style> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/Application.Button" /> 
  • Set textColor to @null in the XML button:

     <Button android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/Application.Button" android:textColor="@null" /> 
+1
source share

There seems to be also textAppearanceButton:

http://developer.android.com/reference/android/R.attr.html#textAppearanceButton

You can try this.

0
source share

All Articles