ListPreference文本颜色

时间:2017-09-05 19:01:34

标签: android android-preferences

我很难尝试设置ListPreference的样式。

我已经应用了一个声明偏好主题的主题,并且它们都链接到了对话主题(分别是alertDialogTheme)。它的工作原理除了项目的文本颜色没有改变 - 但所有其他文本的颜色都有。我不能依赖于解决方法,因为我使用的是v7首选项,因此无法覆盖自定义类中的对话框方法。
对我来说,看起来行忽略了文本颜色值,但也许其他人有一个解决方案。否则这可能是一个错误?

主要风格:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- [...] -->        
    <!-- Some color values -->

    <item name="android:dialogTheme">@style/DialogTheme</item>
    <item name="android:alertDialogTheme">@style/DialogTheme</item>
    <item name="dialogTheme">@style/DialogTheme</item>
    <item name="alertDialogTheme">@style/DialogTheme</item>
    <item name="preferenceTheme">@style/PreferenceTheme</item>

</style>


PreferenceTheme:

<style name="PreferenceTheme" parent="PreferenceThemeOverlay.v14.Material">
    <!-- [...] -->
    <!-- Some color values -->
    <item name="android:textColor">@color/preference_primary_color</item>
    <item name="android:textColorPrimary">@color/preference_primary_color</item>
    <item name="android:textColorSecondary">@color/preference_primary_color</item>
    <item name="android:textColorHighlight">@color/preference_primary_color</item>
    <item name="android:editTextColor">@color/preference_primary_color</item>

    <item name="android:dialogTheme">@style/DialogTheme</item>
    <item name="android:alertDialogTheme">@style/DialogTheme</item>
    <item name="preferenceTheme">@style/PreferenceTheme</item>
</style>


DialogTheme:

<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColor">#EEEEEE</item>
    <item name="android:textColorPrimary">#EEEEEE</item>
    <item name="android:textColorSecondary">#EEEEEE</item>
    <item name="android:textColorHighlight">#EEEEEE</item>
    <item name="android:textColorTertiary">#EEEEEE</item>
    <item name="android:textColorAlertDialogListItem">#EEEEEE</item>
    <item name="android:editTextColor">#EEEEEE</item>

    <item name="color">#EEEEEE</item>
</style>

This is how it looks.
这是它的样子。文字应该是#EEEEEE。我已剪断它,但文本颜色应用于每种给定的样式。

2 个答案:

答案 0 :(得分:2)

你做的一切都是正确的,除了一件事:在覆盖android时不要使用textColorAlertDialogListItem前缀,因为这不是AlertDialog的框架版本。

对于属于支持小部件/视图的几乎所有属性,此语句通常都是如此。原因非常简单:并非旧版平台上的所有属性都可用。这个例子是android:colorControlActivated,它是在API 21中引入的.AppCompat lib声明了它自己的colorControlActivated,所以它也可以在较旧的API级别上使用。在这种情况下,开发人员在定义主题中的样式时不应使用android前缀,因为这将指向属性的平台版本而不是AppCompat版本。

TL; DR:除非必须(即出现编译错误),否则不要将android前缀用于支持小部件。

P.S。:我已经为支持偏好设置了fix / extension - v7 lib你可能想要查看的令人讨厌的东西。

答案 1 :(得分:0)

此外,对于单选按钮,颜色会添加<item name="colorAccent">#000000</item>到您的样式。 请注意,它不是android:colorAccent而是colorAccent