web-dev-qa-db-ja.com

PreferenceFragmentCompatでは、preferenceThemeを設定する必要があります

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が示唆しているとおりですが、正しく見えず、ロリポップでも非常にホロに見えます。

サポートライブラリ:

enter image description here

ネイティブ設定:

enter image description here

114
Intrications

サンプルプロジェクトはここにあります

バグ修正はgradle依存関係として利用可能です

Download

これで、ライブラリを非常に簡単に使用できます。最も簡単な方法は次のとおりですが、詳細についてはREADMEをご覧ください。

1.モジュールのgradleファイルを更新します。

compile 'com.takisoft.fix:preference-v7:27.0.0.0'

2.適切なクラスをフラグメントのベースとして使用します

PreferenceFragmentCompatまたはPreferenceFragmentCompatDividersのいずれかを使用できます。

PreferenceFragmentCompatをインポートするときは、適切なパッケージ名に注意してください)

3.適切なテーマを使用する

含まれるアクティビティのテーマを、NoActionBar、Lightなどの@style/PreferenceFixThemeのバリアントに設定します。

詳細と使用方法のヒントについては、 プロジェクトのページ にアクセスしてください。


PSこのセクションでは、ライブラリの作成につながった詳細なソリューションを見つけることができましたが、混乱を招く可能性があるため、削除することにしました。手順に興味がある場合でも、この回答の 改訂履歴 で見つけることができます。

158

設定アクティビティのテーマでpreferenceThemeを指定する必要があります。

例えば ​​:

<style name="SettingsTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>

PreferenceThemeOverlayは、preference-v7サポートライブラリに付属するデフォルトのテーマです。

45
Bogato

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"
35
Srikar Reddy

この行をテーマに追加したところ、API 19以降で完璧に機能します。

<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
14
Panache

PreferenceFragmentCompat を使用するには、テーマにpreferenceThemeを設定する必要があります。

<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
  ...
  <item name="preferenceTheme">@style/PreferenceThemeOverlay</item>
</style>

この方法で、preferenceThemeをカスタマイズして、アクティビティの他の部分に影響を与えることなく、各設定タイプに使用されるレイアウトをスタイルできます。

14

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デバイスで動作しました

3
voghDev

このコードを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>
2

私にとって最も役立つサイト: Medium

著者は、2つのパッケージを追加する必要があることを示しています:com.Android.support:preference-v7com.Android.support:preference-v14。最初のパッケージはスタイルなしで配布されるためです。

動作するかどうか教えてください

1
macieg_b

スタイルに「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>
1
Sergio Geralnik

受け入れられた「Takisoft修正」はかなり気味が悪いようであり、それをいじった後、結果の外観にまだ満足していません。

API 9+ PreferenceFragmentサポートライブラリが必要な場合は、 Material Preference Support Libraryを使用することをお勧めします。私)。

0
shredEngineer

問題は、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:!*~'
    }
    ...
}

これが役立つことを願っています:)

0
Jason