TextColor在样式中定义应用于TextView,但不是Button?

时间:2010-12-16 16:03:13

标签: android

我已经定义了一些样式资源,包括TextAppearance和定义的TextColor。然后我将样式应用于一些TextViews和Buttons。所有样式都使用TextView,但不是Button。由于某种原因,textColor属性未显示。这是一个错误,还是我在Button的情况下遗漏了什么?

以下是样式定义:

<?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>

这是我尝试应用它们的布局:

<?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>

3 个答案:

答案 0 :(得分:2)

显然,实现此目的的方法是覆盖按钮样式中的textColor属性。 Android在全球主题风格中采用这种方式:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/styles.xml

我很想知道为什么会这样。

答案 1 :(得分:1)

对于Buttons的情况,有两种方法可以通过属性定义文本颜色:textColortextAppearance定义的样式。

textColor设置的值(由默认样式设置)将覆盖textAppearance样式设置的任何文本颜色值。因此,您必须以两种方式之一将textColor属性设置为@null

  • 将样式中的textColor设置为@null:

    <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" />
    
  • 在Button XML中将textColor设置为@null:

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

答案 2 :(得分:0)

似乎还有textAppearanceButton:

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

您可能想尝试一下。