PreferenceFragmentCompat 需要设置 preferenceTheme
PreferenceFragmentCompat requires preferenceTheme to be set
使用 v7 首选项支持库中的新 PreferenceFragmentCompat:http://developer.android.com/tools/support-library/features.html#v7-preference,我收到此错误
E java.lang.IllegalStateException: Must specify preferenceTheme in theme
E at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:202)
应该设置什么主题?
更新: 我试过使用
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
如@Bogato 所建议,但它看起来不正确,即使在 Lollipop 上看起来也很全息。
支持库:
原生偏好:
您必须在您偏好的 activity 主题中指定 preferenceTheme。
例如:
<style name="SettingsTheme" parent="Theme.AppCompat.NoActionBar">
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
PreferenceThemeOverlay 是 preference-v7 支持库自带的默认主题。
我将 "preferenceTheme" 项添加到我的样式中,这似乎解决了问题:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:actionBarStyle">@style/MyActionBarTheme</item>
<item name="colorPrimary">@color/ColorPrimary</item>
<item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
<item name="preferenceTheme">@style/Preference</item>
</style>
错误修复可作为 gradle 依赖项使用
现在可以很容易地使用这个库了。这是最快的方法,但您应该查看自述文件以获取更多信息。
1。更新模块的 gradle 文件:
compile 'com.takisoft.fix:preference-v7:27.0.0.0'
2。使用适当的 class 作为片段的基础
您可以使用 PreferenceFragmentCompat
或 PreferenceFragmentCompatDividers
。
(导入时注意包名正确 PreferenceFragmentCompat
!)
3。使用合适的主题
将包含 Activity 的主题设置为 @style/PreferenceFixTheme
的变体,例如 NoActionBar、Light 等
For more info and usage tips, go to the project's page.
P.S。在本节中,您可以找到导致创建库的详细解决方案,但我决定将其删除,因为它可能会造成混淆。如果你对这些步骤感到好奇,你仍然可以在这个答案的 revision history 中找到它们。
要使用 PreferenceFragmentCompat,您必须在主题中设置 preferenceTheme
:
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
...
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
通过这种方式,您可以自定义 preferenceTheme
以设置用于每种首选项类型的布局样式,而不会影响 Activity 的其他部分。
放手使用API 11+。
API7快七岁了。
我刚刚在主题中添加了这一行,它在 API 19 及更高版本上运行完美。
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
接受的"Takisoft Fix"看起来有点笨拙,玩了之后,我对最终的外观仍然不满意。
如果需要API 9+ PreferenceFragment
支持库,推荐使用Material Preference Support Library.
它工作得很好(至少对我来说是这样)。
在 API 25 中对我有用的解决方案。我有这个默认主题:
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
并添加了这一行
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
PreferenceThemeOverlay 已经定义,我不必包含它。
它适用于我自己的 Android 4.x 和 5.x 设备
将此代码添加到您的 styles.xml 并根据其进行修改。它应该工作正常。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
<style name="PreferenceThemeOverlay">
<item name="preferenceScreenStyle">@style/Preference.PreferenceScreen</item>
<item name="preferenceFragmentStyle">@style/PreferenceFragment</item>
<item name="preferenceCategoryStyle">@style/Preference.Category</item>
<item name="preferenceStyle">@style/Preference</item>
<item name="preferenceInformationStyle">@style/Preference.Information</item>
<item name="checkBoxPreferenceStyle">@style/Preference.CheckBoxPreference</item>
<item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat</item>
<item name="dialogPreferenceStyle">@style/Preference.DialogPreference</item>
<item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference</item>
<item name="preferenceFragmentListStyle">@style/PreferenceFragmentList</item>
</style>
由于AAPT(Android资产打包工具)找不到部分资源,出现该问题。修复问题如下:
1.Copy 资源,这是新的响应资源文件夹所必需的,命名为 res_fw_v7_preference 或其他名称。
2.Using gradle 构建您的应用程序并在 build.gradle(模块的)中添加一些额外的 AAPT 选项,如下所示:
android {
...
aaptOptions {
additionalParameters '-S',
'src/main/res_fw_v17_leanback', // resources in frameworks/support/v17/leanback
'-S',
'src/main/res_fw_v7_preference', // resources in frameworks/support/v7/preference
'-S',
'src/main/res_fw_v14_preference', // resources in frameworks/support/v14/preference
'-S',
'src/main/res_fw_v17_preference-leanback', // resources in frameworks/support/v17/preference-leanback
'-S',
'src/main/res_fw_v7_appcompat', // resources in frameworks/support/v7/appcompat
'-S',
'src/main/res_fw_v7_recyclerview', // resources in frameworks/support/v7/recyclerview
'-S',
'src/main/res', // resources in your application
'--auto-add-overlay',
'--extra-packages',
'android.support.v17.leanback:android.support.v7.preference:android.support.v14.preference:android.support.v17.preference:android.support.v7.appcompat:android.support.v7.recyclerview'
noCompress 'foo', 'bar'
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
}
...
}
希望这对您有所帮助:)
似乎 Google 解决了这个问题。我已经使用首选项 v14-support version 25.3.1
测试了这个
1) 将 implementation 'com.android.support:preference-v14:25.3.1'
添加到您的 Gradle.
2) 在样式中添加 PreferenceThemeOverlay.v14.Material
而不是 PreferenceThemeOverlay
.
<style name="AppTheme.SettingsTheme" parent="AppTheme.NoActionBar">
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
3) 最后,将样式添加到Manifest中
android:theme="@style/AppTheme.SettingsTheme"
对我最有帮助的网站:Medium
作者表明我们需要添加两个包:com.android.support:preference-v7
和 com.android.support:preference-v14
,因为第一个包没有样式。
如果有效请告诉我
感谢@sergio 的回答,使用 <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
而不是 <item name="preferenceTheme">@style/Preference</item>
对我来说效果很好。
<style name="IntentTheme" parent="Theme.AppCompat">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:actionModeBackground">@color/fulltransparent</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
使用 v7 首选项支持库中的新 PreferenceFragmentCompat:http://developer.android.com/tools/support-library/features.html#v7-preference,我收到此错误
E java.lang.IllegalStateException: Must specify preferenceTheme in theme
E at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:202)
应该设置什么主题?
更新: 我试过使用
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
如@Bogato 所建议,但它看起来不正确,即使在 Lollipop 上看起来也很全息。
支持库:
原生偏好:
您必须在您偏好的 activity 主题中指定 preferenceTheme。
例如:
<style name="SettingsTheme" parent="Theme.AppCompat.NoActionBar">
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
PreferenceThemeOverlay 是 preference-v7 支持库自带的默认主题。
我将 "preferenceTheme" 项添加到我的样式中,这似乎解决了问题:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:actionBarStyle">@style/MyActionBarTheme</item>
<item name="colorPrimary">@color/ColorPrimary</item>
<item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
<item name="preferenceTheme">@style/Preference</item>
</style>
错误修复可作为 gradle 依赖项使用
现在可以很容易地使用这个库了。这是最快的方法,但您应该查看自述文件以获取更多信息。
1。更新模块的 gradle 文件:
compile 'com.takisoft.fix:preference-v7:27.0.0.0'
2。使用适当的 class 作为片段的基础
您可以使用 PreferenceFragmentCompat
或 PreferenceFragmentCompatDividers
。
(导入时注意包名正确 PreferenceFragmentCompat
!)
3。使用合适的主题
将包含 Activity 的主题设置为 @style/PreferenceFixTheme
的变体,例如 NoActionBar、Light 等
For more info and usage tips, go to the project's page.
P.S。在本节中,您可以找到导致创建库的详细解决方案,但我决定将其删除,因为它可能会造成混淆。如果你对这些步骤感到好奇,你仍然可以在这个答案的 revision history 中找到它们。
要使用 PreferenceFragmentCompat,您必须在主题中设置 preferenceTheme
:
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
...
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
通过这种方式,您可以自定义 preferenceTheme
以设置用于每种首选项类型的布局样式,而不会影响 Activity 的其他部分。
放手使用API 11+。
API7快七岁了。
我刚刚在主题中添加了这一行,它在 API 19 及更高版本上运行完美。
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
接受的"Takisoft Fix"看起来有点笨拙,玩了之后,我对最终的外观仍然不满意。
如果需要API 9+ PreferenceFragment
支持库,推荐使用Material Preference Support Library.
它工作得很好(至少对我来说是这样)。
在 API 25 中对我有用的解决方案。我有这个默认主题:
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
并添加了这一行
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
PreferenceThemeOverlay 已经定义,我不必包含它。 它适用于我自己的 Android 4.x 和 5.x 设备
将此代码添加到您的 styles.xml 并根据其进行修改。它应该工作正常。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
<style name="PreferenceThemeOverlay">
<item name="preferenceScreenStyle">@style/Preference.PreferenceScreen</item>
<item name="preferenceFragmentStyle">@style/PreferenceFragment</item>
<item name="preferenceCategoryStyle">@style/Preference.Category</item>
<item name="preferenceStyle">@style/Preference</item>
<item name="preferenceInformationStyle">@style/Preference.Information</item>
<item name="checkBoxPreferenceStyle">@style/Preference.CheckBoxPreference</item>
<item name="switchPreferenceCompatStyle">@style/Preference.SwitchPreferenceCompat</item>
<item name="dialogPreferenceStyle">@style/Preference.DialogPreference</item>
<item name="editTextPreferenceStyle">@style/Preference.DialogPreference.EditTextPreference</item>
<item name="preferenceFragmentListStyle">@style/PreferenceFragmentList</item>
</style>
由于AAPT(Android资产打包工具)找不到部分资源,出现该问题。修复问题如下:
1.Copy 资源,这是新的响应资源文件夹所必需的,命名为 res_fw_v7_preference 或其他名称。
2.Using gradle 构建您的应用程序并在 build.gradle(模块的)中添加一些额外的 AAPT 选项,如下所示:
android {
...
aaptOptions {
additionalParameters '-S',
'src/main/res_fw_v17_leanback', // resources in frameworks/support/v17/leanback
'-S',
'src/main/res_fw_v7_preference', // resources in frameworks/support/v7/preference
'-S',
'src/main/res_fw_v14_preference', // resources in frameworks/support/v14/preference
'-S',
'src/main/res_fw_v17_preference-leanback', // resources in frameworks/support/v17/preference-leanback
'-S',
'src/main/res_fw_v7_appcompat', // resources in frameworks/support/v7/appcompat
'-S',
'src/main/res_fw_v7_recyclerview', // resources in frameworks/support/v7/recyclerview
'-S',
'src/main/res', // resources in your application
'--auto-add-overlay',
'--extra-packages',
'android.support.v17.leanback:android.support.v7.preference:android.support.v14.preference:android.support.v17.preference:android.support.v7.appcompat:android.support.v7.recyclerview'
noCompress 'foo', 'bar'
ignoreAssetsPattern '!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
}
...
}
希望这对您有所帮助:)
似乎 Google 解决了这个问题。我已经使用首选项 v14-support version 25.3.1
测试了这个1) 将 implementation 'com.android.support:preference-v14:25.3.1'
添加到您的 Gradle.
2) 在样式中添加 PreferenceThemeOverlay.v14.Material
而不是 PreferenceThemeOverlay
.
<style name="AppTheme.SettingsTheme" parent="AppTheme.NoActionBar">
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
3) 最后,将样式添加到Manifest中
android:theme="@style/AppTheme.SettingsTheme"
对我最有帮助的网站:Medium
作者表明我们需要添加两个包:com.android.support:preference-v7
和 com.android.support:preference-v14
,因为第一个包没有样式。
如果有效请告诉我
感谢@sergio 的回答,使用 <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
而不是 <item name="preferenceTheme">@style/Preference</item>
对我来说效果很好。
<style name="IntentTheme" parent="Theme.AppCompat">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:actionModeBackground">@color/fulltransparent</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>