如何使用不同的TextView和Spinner文本颜色创建全局主题?

时间:2012-01-17 23:07:08

标签: android styles themes textview spinner

我正在编写一个需要以下两件事的应用程序:

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

我使用了在清单中的应用程序级别应用的主题来执行上面的第一项。

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

工作得很好。除此之外,它还使旋转器上的文本变白,难以阅读。

好的,所以我希望微调器颜色仍为黑色,但 else 的所有内容都是白色。

我发现this question显示了如何设置Spinner文本颜色,并且它可以工作,但仅当我还没有设置全局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所以我尝试提出类似于textViewStyle分隔的spinnerItemStyle类型分隔,但没有运气好的话。

与大多数提出此问题的人不同,我希望尽可能地将其保留在XML中。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分: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>

这会使TextViews中的文本变白,而Spinners中的文本变黑。