【问题标题】:ListPreference text colorListPreference 文本颜色
【发布时间】:2017-09-05 19:01:33
【问题描述】:

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

我应用了一个主主题,它声明了一个preferenceTheme,它们都链接到一个dialogTheme(和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>


偏好主题:

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


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

【问题讨论】:

    标签: android android-preferences


    【解决方案1】:

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

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

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


    P.S.:我创建了一个 fix / extension 来支持您可能想要查看的 support preferences-v7 lib 烦人的事情。

    【讨论】:

    • 你说得对。我在大约 2 小时内尝试了很多东西,但并没有真正想到这一点。也感谢您的解释,我不知道为什么 android: 前缀有时会丢失。
    • 谢谢!节省了我很多时间,事实上我自己永远无法发现它:)
    【解决方案2】:

    也为单选按钮颜色添加&lt;item name="colorAccent"&gt;#000000&lt;/item&gt; 到您的样式。 小心,不是android:colorAccent,而是colorAccent

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      相关资源
      最近更新 更多