将targetSdkVersion设置为28后会破坏PreferenceFragmentCompat样式。

时间:2018-11-23 07:38:03

标签: android

嘿,在我升级到sdk版本28之前,我的PreferenceFragmentCompat看起来不错。但是,升级后,它的样式已损坏,我似乎无法修复。为什么是原因,我该如何解决?

这是我的应用程序样式:

<style name="MyMaterialTheme0" parent="MyMaterialTheme0.Base"/>

<style name="MyMaterialTheme0.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary0</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark0</item>
    <item name="colorAccent">@color/colorAccent0</item>
    <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>

旧样式 Old style 新的残破样式 New broken style

2 个答案:

答案 0 :(得分:0)

根据Preference rc01 release notes

  
      
  • PreferenceThemeOverlay已更新为最新的主题。如果未提供自定义主题,则将PreferenceThemeOverlay用作默认主题。
  •   
  • PreferenceThemeOverlay.v14PreferenceThemeOverlay.v14.Material主题已被弃用,以PreferenceThemeOverlay为准。
  •   

因此,您可以完全删除preferenceTheme属性以获取默认属性,如果根本不自定义首选项主题,请更正主题。

答案 1 :(得分:0)

Here are the diff PreferenceThemeOverlay.v14.Material PreferenceThemeOverlay 之间进行更改。请注意新的 allowDividerAbove allowDividerBelow iconSpaceReserved 属性。 我不得不修改自己的样式以使其在更新之前匹配,例如:

<style name="AppSettingsTheme" parent="PreferenceThemeOverlay">
    <item name="preferenceCategoryStyle">@style/AppSettings.Category.Material</item>
    <item name="preferenceFragmentCompatStyle">@style/AppSettings.Fragment.Material</item>
    <item name="preferenceStyle">@style/AppSettings.Preference.Material</item>
</style>

<style name="AppSettings.Category.Material" parent="Preference.Category.Material">
    <item name="allowDividerAbove">false</item>
    <item name="allowDividerBelow">false</item>
    <item name="iconSpaceReserved">false</item>
</style>

<style name="AppSettings.Fragment.Material" parent="PreferenceFragment.Material">
    <item name="allowDividerAfterLastItem">true</item>
</style>

<style name="AppSettings.Preference.Material" parent="Preference.Material">
    <item name="allowDividerAbove">true</item>
    <item name="allowDividerBelow">true</item>
    <item name="iconSpaceReserved">false</item>
</style>

并将您的 preferenceTheme 更新为 @ style / AppSettingsTheme 值,而不是 @ style / PreferenceThemeOverlay.v14.Material