首页 > 解决方案 > 将 targetSdkVersion 设置为 28 后,PreferenceFragmentCompat 样式被破坏。

问题描述

嘿,在我升级到 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>

旧样式 新破样式老式 新破风格

标签: android

解决方案


以下是PreferenceThemeOverlay.v14.MaterialPreferenceThemeOverlay之间的差异变化。注意新的allowDividerAboveallowDividerBelowiconSpaceReserved属性。在更新之前,我必须修改我的样式以匹配:

<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


推荐阅读