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

Tom*_*idd 7 android themes styles spinner textview

我正在写一个需要以下两件事的App:

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

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

<resources>
    <style name="GlobalTheme" parent="@android:style/Theme.Black.NoTitleBar.Fullscreen">
        <item name="android:textColor">#FFFFFF</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

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

好的,所以我希望微调颜色仍然是黑色,但其他一切都是白色的.

我发现这个问题显示了如何设置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>
Run Code Online (Sandbox Code Playgroud)

我想我希望这会像CSS一样,事情会向下级联(即"所有文本都应该是白色的,除了在旋转器中").如果我删除android:textColor主题中的行,微调颜色技巧工作正常.

它看起来像SpinnerItem源于此,TextView所以我试图想出textViewStyle类似于spinnerItemStyle分离的类型分离,但没有任何运气.

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

Tof*_*erJ 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>
Run Code Online (Sandbox Code Playgroud)

这将使 TextView 中的文本变为白色,而 Spinner 中的文本变为黑色。