ListPreference 文本颜色

ListPreference text color

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

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

主要风格:

<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>


偏好主题:

<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>


对话主题:

<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>


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

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

的框架版本

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

TL;DR: 不要对支持小部件使用 android 前缀,除非你必须这样做(即出现编译错误)。


P.S.: 我已经创建了一个 fix / extension 来支持 preferences-v7 lib 的烦人的东西,你可能想检查一下。

还可以为单选按钮颜色添加 <item name="colorAccent">#000000</item> 到您的样式。 注意,不是 android:colorAccent 而是 colorAccent