【问题标题】:How can I have a global theme with different TextView and Spinner text colors?如何拥有具有不同 TextView 和 Spinner 文本颜色的全局主题?
【发布时间】:2012-02-12 17:58:14
【问题描述】:

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

  • 一般文本(TextViews)必须是一种颜色(白色,在本例中为深色背景)
  • Spinner 上的文本需要是不同的颜色(黑色,因为白色太难读)

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

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

工作得很好。除了它还会使微调器上的文本变白,难以阅读。

好的,所以我希望 spinner 颜色仍然是黑色,但所有 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,所以我尝试提出类似于spinnerItemStyle 分隔的textViewStyle 类型分隔,但没有任何运气。

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

【问题讨论】:

  • 为什么不能使用 parent="android:Widget.TextView" 作为一种颜色,而使用 parent="android:Widget.TextView.SpinnerItem" 作为另一种颜色?

标签: android styles themes textview spinner


【解决方案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 中的文本变为黑色。

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    相关资源
    最近更新 更多