PreferenceFragmentCompat

PreferenceFragmentCompat

我想覆盖v14 preferencefragmentcompat使用的accentcolor。
我的android应用程序的外部框架使用了粉色。这在许多情况下都会产生问题,因为它会导致标准控件使用接近红色的强调色,从而产生令人不安的效果。尽管如此,我还是喜欢在画框上有粉色的fab和按钮控件的效果。
对于儿童活动,我使用标准的青色口音的颜色。但是,我在主活动的抽屉中有一个preferencefragment compat,我不知道如何重写主活动的重音颜色。
我试过的东西(都不管用):
在接收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样式提供显式的teal 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>

向首选项v14的首选项themeoverlay添加强调色(不起作用):
  <!-- 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似乎从活动的主题中取而代之的是粉红色的重音。
我确信这与活动主题和片段主题之间的脱节有关。但是该片段没有xml元素,因为preferencefragmentcompat提供了自己的布局。
也许有一种方法可以通过扩展preferencefragmentcompat的类中的重写以编程方式完成,但是如果有,我无法想象它会是什么。我能想到的大多数攻击点要么可以访问内部创建的布局,要么在创建布局之后就可以访问布局,这太晚了。
一张照片可能会有帮助:
android - 如何设置PreferenceFragmentCompat accentColor?-LMLPHP

最佳答案

您是否尝试覆盖android:colorAccent而不是colorAccent
使用描述为“在首选项主题中设置重音颜色”的方法,只需更改属性名称。
首选项支持库根本没有考虑appcompat,因此
忘记appcompat属性
color*我认为属性只能在api 21上起作用
如果需要一致的行为,可以使用my library Android Support Preference来连接首选项和AppCompat支持库。
然后,使用colorAccent(未固定)的原始样式将按预期工作。

关于android - 如何设置PreferenceFragmentCompat accentColor?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33901470/

10-13 03:34