Как создать глобальную тему с разными цветами текста TextView и Spinner? - PullRequest
7 голосов
/ 18 января 2012

Я пишу приложение, которому нужны следующие две вещи:

  • Общий текст (в TextView с) должен быть одного цвета (белый, в данном случае - темный фон)
  • Текст на Spinner должен быть другого цвета (черный, так как белый слишком трудно читать)

Я использовал тему, примененную на уровне приложения в манифесте, для выполнения первого пункта выше.

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

Отлично сработало. Кроме того, он также делает текст на блесне белым, что трудно читать.

ОК, поэтому я хочу, чтобы цвет spinner оставался черным, а все остальное - белым.

Я нашел этот вопрос , который показал, как установить цвет текста 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 Ответ

1 голос
/ 30 июля 2013

Попробуйте это:

<?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 - черным.

...