V7 Preference Support Libraryの新しい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が示唆しているとおりですが、正しく見えず、ロリポップでも非常にホロに見えます。
サポートライブラリ:
ネイティブ設定:
これで、ライブラリを非常に簡単に使用できます。最も簡単な方法は次のとおりですが、詳細についてはREADMEをご覧ください。
compile 'com.takisoft.fix:preference-v7:27.0.0.0'
PreferenceFragmentCompat
またはPreferenceFragmentCompatDividers
のいずれかを使用できます。
(PreferenceFragmentCompat
!をインポートするときは、適切なパッケージ名に注意してください)
含まれるアクティビティのテーマを、NoActionBar、Lightなどの@style/PreferenceFixTheme
のバリアントに設定します。
詳細と使用方法のヒントについては、 プロジェクトのページ にアクセスしてください。
PSこのセクションでは、ライブラリの作成につながった詳細なソリューションを見つけることができましたが、混乱を招く可能性があるため、削除することにしました。手順に興味がある場合でも、この回答の 改訂履歴 で見つけることができます。
設定アクティビティのテーマでpreferenceThemeを指定する必要があります。
例えば :
<style name="SettingsTheme" parent="Theme.AppCompat.NoActionBar">
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
PreferenceThemeOverlayは、preference-v7サポートライブラリに付属するデフォルトのテーマです。
Googleはこの問題を修正したようです。プリファレンスv14-supportバージョン25.3.1でこれをテストしました
1)implementation 'com.Android.support:preference-v14:25.3.1'
をGradleに追加します。
2)スタイルにPreferenceThemeOverlay
の代わりにPreferenceThemeOverlay.v14.Material
を追加します。
<style name="AppTheme.SettingsTheme" parent="AppTheme.NoActionBar">
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
3)最後に、スタイルをマニフェストに追加します
Android:theme="@style/AppTheme.SettingsTheme"
この行をテーマに追加したところ、API 19以降で完璧に機能します。
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
PreferenceFragmentCompat を使用するには、テーマにpreferenceTheme
を設定する必要があります。
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
...
<item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>
この方法で、preferenceTheme
をカスタマイズして、アクティビティの他の部分に影響を与えることなく、各設定タイプに使用されるレイアウトをスタイルできます。
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>
私にとって最も役立つサイト: Medium
著者は、2つのパッケージを追加する必要があることを示しています:com.Android.support:preference-v7
とcom.Android.support:preference-v14
。最初のパッケージはスタイルなしで配布されるためです。
動作するかどうか教えてください
スタイルに「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>
受け入れられた「Takisoft修正」はかなり気味が悪いようであり、それをいじった後、結果の外観にまだ満足していません。
API 9+ PreferenceFragment
サポートライブラリが必要な場合は、 Material Preference Support Library 。を使用することをお勧めします。私)。
問題は、AAPT(Android Asset Packaging Tool)が一部のリソースを見つけられないために発生します。この問題を次のように修正します。
1.必要なリソースを、res_fw_v7_preferenceなどの名前の新しい応答リソースフォルダーにコピーします。
2. gradleを使用してアプリケーションをビルドし、build.gradle(module's)に次のような追加の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:!*~'
}
...
}
これが役立つことを願っています:)