嘿,在我升级到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>
答案 0 :(得分:0)
根据Preference rc01 release notes:
PreferenceThemeOverlay
已更新为最新的主题。如果未提供自定义主题,则将PreferenceThemeOverlay
用作默认主题。PreferenceThemeOverlay.v14
和PreferenceThemeOverlay.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