列表首选项文本颜色

Ch4*_*t4r 2 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>
Run Code Online (Sandbox Code Playgroud)


偏好主题:

<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>
Run Code Online (Sandbox Code Playgroud)


对话主题:

<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>
Run Code Online (Sandbox Code Playgroud)

这是它的样子。
这是它的外观。文本应该是#EEEEEE。我已经剪掉了它,但文本颜色应用于每个给定的样式。

Ger*_*ssy 8

你做的一切都对,除了一件事:android覆盖时不要使用前缀,textColorAlertDialogListItem因为这不是AlertDialog.

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

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


PS:我已经为支持首选项-v7 lib 的烦人内容创建了一个修复/扩展,您可能想查看这些内容。