如何在全局主题中设置不同的TextView和Spinner文本颜色?

7

我正在编写一个应用程序,需要以下两个功能:

  • TextView 中的一般文本需要是一个颜色(在这种情况下是白色 - 暗背景)
  • Spinner 上的文本需要是不同的颜色(黑色,因为白色太难读了)

我使用了一个主题,在清单文件中应用到应用程序级别上,以实现上述第一项。

<resources>
    <style name="GlobalTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:textColor">#FFFFFF</item>
    </style>
</resources>

工作得很好。但它也使得旋转器上的文本变成白色,很难阅读。
好的,所以我希望旋转器颜色仍然是黑色,但其他所有东西都是白色。
我找到了这个问题,它显示了如何设置旋转器文本颜色,并且它有效,但只有当我没有同时设置全局textColor时才有效。
因此,以下内容不起作用:
<resources>
    <style name="GlobalTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:textColor">#FFFFFF</item>
        <item name="android:spinnerItemStyle">@style/GlobalThemeSpinnerItem</item>
    </style>
    <style name="GlobalThemeSpinnerItem" parent="android:Widget.TextView.SpinnerItem">
        <item name="android:textAppearance">@style/GlobalThemeTextAppearanceSpinnerItem</item>
    </style>
    <style name="GlobalThemeTextAppearanceSpinnerItem" parent="android:TextAppearance.Widget.TextView.SpinnerItem">
        <item name="android:textColor">#000000</item>
    </style>
</resources>

我想这应该像CSS一样级联(即,“所有文本都应为白色,除了旋转器中的文本”)。如果我在主题中删除android:textColor行,则旋转器颜色技巧正常工作。
看起来SpinnerItem派生自TextView,所以我尝试设计类似于spinnerItemStyle分离的textViewStyle类型分离,但没有成功。
与大多数询问此问题的人不同,我希望尽可能地将其保留在XML中。有人知道我做错了什么吗?

为什么你不能在一个颜色中使用parent="android:Widget.TextView",而在另一个颜色中使用parent="android:Widget.TextView.SpinnerItem"? - Warpzit
1个回答

1
尝试这个:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">

<style name="GlobalTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen">
    <item name="android:spinnerItemStyle">@style/GlobalThemeSpinnerItem</item>
    <item name="android:textViewStyle">@style/GlobalThemeTextViewItem</item>
</style>

<style name="GlobalThemeTextViewItem" parent="android:Widget.TextView">
    <item name="android:textAppearance">@style/GlobalThemeTextAppearanceTextViewItem</item>
</style>
<style name="GlobalThemeTextAppearanceTextViewItem" parent="android:TextAppearance.Widget.TextView">
    <item name="android:textColor">#FFFFFF</item>
</style>

<style name="GlobalThemeSpinnerItem" parent="android:Widget.TextView.SpinnerItem">
    <item name="android:textAppearance">@style/GlobalThemeTextAppearanceSpinnerItem</item>
</style>
<style name="GlobalThemeTextAppearanceSpinnerItem" parent="android:TextAppearance.Widget.TextView.SpinnerItem">
    <item name="android:textColor">#000000</item>
</style>

这将使您的TextView中的文本呈白色,您的Spinner中的文本呈黑色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接