3

我想覆盖 v14 PreferenceFragmentCompat 使用的强调颜色。

我正在为我的 Android 应用程序的外框使用粉红色的强调色。这在许多情况下都会产生问题,因为它会导致标准控件使用与红色足够接近的强调色,以至于效果令人不安。尽管如此,我喜欢在框架上有一个粉红色的 FAB 和按钮控件的效果。

对于儿童活动,我使用带有标准青色强调色的它们。但是,我在主要活动的抽屉中有一个 PreferenceFragment 兼容,我无法弄清楚如何覆盖主要活动的强调色。

我尝试过的事情(都没有工作):

在接收 PreferenceFragmentCompat 的片段的框架上设置主题(不起作用):

<FrameLayout android:id="@+id/preferenceFragmentFrame" 
    android:layout_width="match_parent" android:layout_height="0dp"
    android:layout_weight="1"
    android:theme="@style/AppTheme.TealAccentColor"
    />

其中 AppTheme.TealAccentColor 样式提供了明确的青色 acccentColor。

在首选项主题中设置强调颜色(不起作用):

  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        ...
     <item name="preferenceTheme">@style/MyPreferenceThemeOverlay</item>
    </style>
    <style name=MyPreferenceThemeOverlay parent="PreferenceThemeOverlay.v14.Material>
         <item name="colorAccent">@color/colorAccentTeal</item>
    </style>

向preference-v14 的PreferenceThemeOverlay 添加强调色(不起作用):

  <!-- use the library's theme-->
  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        ...
     <item name="preferenceTheme">PreferenceThemeOverlay.v14.Material</item>
   </style>
   <!-- but add an accentColor item to the library's theme -->
   <style name="PreferenceThemeOverlay.v14">
        <item name="colorAccent">@color/colorAccentTeal</item>
   </style>

无论我做什么,PreferenceFragmentCompat 似乎都从 Activity 的主题中取了粉红色的强调色。

我确信这与 Activity 的主题和 Fragment 的主题之间的脱节有关。但是片段没有 xml 元素,因为 PreferenceFragmentCompat 提供了自己的布局。

也许有一种方法可以通过扩展 PreferenceFragmentCompat 的类中的覆盖以编程方式完成,但如果有,我无法想象它会是什么。我能想到的大部分攻击点要么访问内部创建的布局,要么访问创建后的布局,这为时已晚。

图片可能会有所帮助:

在此处输入图像描述

4

1 回答 1

1

您是否尝试过覆盖android:colorAccent而不是colorAccent

使用您描述为“在首选项主题中设置强调颜色”的方法,只需更改属性名称即可。

偏好支持库根本不考虑 appcompat,所以

  1. 忘记 appcompat 属性
  2. color*我认为属性仅适用于 API 21

如果你想要一致的行为,你可以使用我的 Android Support Preference 库,它旨在连接首选项和 appcompat 支持库。

然后,您使用(无前缀)的原始样式colorAccent将按预期工作。

于 2018-07-22T09:47:27.180 回答