С новым PreferenceFragmentCompat из библиотеки поддержки предпочтений v7: 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.
Библиотека поддержки:
Родные предпочтения:
Ответы:
Исправление доступно как зависимость Gradle
Теперь пользоваться библиотекой стало довольно просто. Вот самый быстрый способ сделать это, но вы должны проверить README для получения дополнительной информации.
1. Обновите файл gradle вашего модуля:
compile 'com.takisoft.fix:preference-v7:27.0.0.0'
2. Используйте соответствующий класс как основу вашего фрагмента.
Вы можете использовать либо,
PreferenceFragmentCompat
либоPreferenceFragmentCompatDividers
.( Следите за соответствующим именем пакета при импорте
PreferenceFragmentCompat
! )3. Используйте соответствующую тему.
Задайте для своей темы Activity вариант
@style/PreferenceFixTheme
, например NoActionBar, Light и т. Д.PS В этом разделе вы могли найти подробное решение, которое привело к созданию библиотеки, но я решил удалить его, потому что это могло сбивать с толку. Если вам интересно узнать о шагах, вы все равно можете найти их в истории изменений этого ответа.
источник
Вы должны указать preferenceTheme в теме вашего предпочтительного действия.
Например :
PreferenceThemeOverlay - это тема по умолчанию, которая поставляется с библиотекой поддержки preference-v7.
источник
Похоже, Google исправил эту проблему. Я тестировал это с предпочтением v14-support версии 25.3.1
1) Добавьте
implementation 'com.android.support:preference-v14:25.3.1'
в свой Gradle.2) Добавить
PreferenceThemeOverlay.v14.Material
в стиль вместоPreferenceThemeOverlay
.3) Наконец, добавьте стиль в Manifest
источник
preferenceTheme
дляPreferenceThemeOverlay.v14
вstyles.xml
иPreferenceThemeOverlay.v14.Material
вstyles-v21.xml
затруднительных проблем.minSdkVersion
от 14 до 20.Чтобы использовать PreferenceFragmentCompat, вы должны установить
preferenceTheme
в своей теме:Таким образом, вы можете настроить
preferenceTheme
стиль макетов, используемых для каждого типа предпочтений, не затрагивая другие части вашей деятельности.источник
Я просто добавил эту строку в тему, и она отлично работает с API 19 и выше.
источник
Решение, которое сработало для меня в API 25. У меня была эта тема по умолчанию:
И добавил к нему эту строчку
PreferenceThemeOverlay уже был определен, мне не нужно было его включать. Он работал на моих собственных устройствах Android 4.x и 5.x.
источник
Добавьте этот код в свой файл styles.xml и измените его соответствующим образом. Должно работать нормально.
источник
Я добавил в свой стиль элемент «preferenceTheme», и это, похоже, устранило проблему:
источник
Самый полезный сайт для меня: средний
Автор показывает, что нам нужно добавить два пакета:
com.android.support:preference-v7
иcom.android.support:preference-v14
, поскольку первый распространяется без стилей.Сообщите мне, если это сработает
источник
Принятое "Takisoft Fix" кажется довольно неуклюжим, и после того, как я поигрался с ним, я все еще не удовлетворен полученным результатом.
Если вам нужна
PreferenceFragment
библиотека поддержки API 9+ , я рекомендую использовать библиотеку поддержки предпочтений материалов . Работает отлично (по крайней мере, у меня).источник
Проблема возникает из-за того, что AAPT (Android Asset Packaging Tool) не может найти некоторые ресурсы. Исправьте эту проблему следующим образом:
1. Скопируйте необходимые ресурсы в новую отвечающую папку ресурсов с именем res_fw_v7_preference или чем-то еще.
2. С помощью gradle создайте свое приложение и добавьте некоторые дополнительные параметры AAPT в build.gradle (модуль), например:
Надеюсь, это будет полезно :)
источник
Спасибо @sergio за ответ, использование
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
вместо<item name="preferenceTheme">@style/Preference</item>
отлично подходит для меня.источник
Просто отпустите и используйте API 11+.
API 7 исполнилось почти семь лет.
источник