Совместимость с панелью действий была добавлена в библиотеку поддержки, редакция 18. Теперь в ней есть ActionBarActivity
класс для создания действий с панелью действий в старых версиях Android.
Есть ли способ добавить панель действий из библиотеки поддержки PreferenceActivity
?
Раньше я использовал ActionBarSherlock, и у него есть SherlockPreferenceActivity
.
Ответы:
РЕДАКТИРОВАТЬ: в appcompat-v7 22.1.0 Google добавил абстрактный класс AppCompatDelegate в качестве делегата, который можно использовать для расширения поддержки AppCompat для любого действия.
Используйте это так:
Больше никакого взлома. Код взят из AppCompatPreferenceActivity.java .
источник
(ViewGroup) getWindow().getDecorView().getRootView()
В настоящее время нет возможности достичь с помощью AppCompat. Я обнаружил внутреннюю ошибку.
источник
PreferenceActivity
добавитьActionBarCompat
?Мне удалось создать обходной путь, аналогичный тому, который используется в Google Play Store. Ссылка на исходный ответ
Пожалуйста, найдите репозиторий GitHub: здесь
Очень похоже на ваш собственный код, но добавлен xml, позволяющий установить заголовок:
Продолжая использовать
PreferenceActivity
:settings_toolbar.xml :
SettingsActivity.java :
Result :
ОБНОВЛЕНИЕ (Совместимость с пряниками):
Как указано здесь , Gingerbread Devices возвращают исключение NullPointerException в этой строке:
FIX:
SettingsActivity.java :
Сообщите мне о любых проблемах с вышеуказанным!
ОБНОВЛЕНИЕ 2: ВОЗМОЖНОЕ РЕШЕНИЕ ПО ОКРАШИВАНИЮ
Как указано во многих заметках разработчика
PreferenceActivity
, не поддерживает тонирование элементов, однако, используя несколько внутренних классов, вы МОЖЕТЕ добиться этого. Пока эти классы не будут удалены. (Работает с использованием appCompat support-v7 v21.0.3).Добавьте следующий импорт:
Затем переопределите
onCreateView
метод:Result:
AppCompat 22.1
AppCompat 22.1 представил новые тонированные элементы, что означает, что больше нет необходимости использовать внутренние классы для достижения того же эффекта, что и при последнем обновлении. Вместо этого следуйте этому (все еще приоритетному
onCreateView
):Вложенные экраны предпочтений
Многие люди испытывают проблемы с включением Панели инструментов во вложенные,
<PreferenceScreen />
однако я нашел решение !! - После долгих проб и ошибок!Добавьте в свой
SettingsActivity
:Причина, по которой
PreferenceScreen
это такая неприятность, заключается в том, что они основаны на диалоге-оболочке, поэтому нам нужно зафиксировать макет диалога, чтобы добавить к нему панель инструментов.Тень панели инструментов
По дизайну, импорт
Toolbar
не допускает возвышения и затенения на устройствах до версии 21, поэтому, если вы хотите, чтобы у вас было повышение,Toolbar
вам нужно обернуть его вAppBarLayout
:`settings_toolbar.xml:
Не забудьте добавить библиотеку поддержки дизайна в качестве зависимости в
build.gradle
файл:Android 6.0
Я исследовал проблему перекрытия, о которой сообщалось, и не могу воспроизвести ее.
Полный код, используемый, как указано выше, дает следующее:
Если мне что-то не хватает, дайте мне знать через это репо, и я займусь расследованием.
источник
:)
PreferenceActivity
такая заноза в жопе использовать ??? это должно экономить время. С таким же успехом я мог бы заняться обычным делом и вручную выложить все настройки в линейный макет. Фуууук!Найдена реализация PreferenceFragment на основе фрагмента support-v4:
https://github.com/kolavar/android-support-v4-preferencefragment
Изменить: я только что протестировал его, и он отлично работает!
источник
Интеграция
PreferenceActivity
с ABC невозможна, по крайней мере, для меня. Я попробовал две возможности, которые смог найти, но ни одна из них не сработала:Опция 1:
ActionBarPreferenceActivity
расширяетсяPreferenceActivity
. Когда вы это сделаете, вы будете ограниченыActionBarActivityDelegate.createDelegate(ActionBarActivity activity)
. Также вам нужно реализовать то,ActionBar.Callbacks
что недоступноВариант 2:
ActionBarPreferenceActivity
расширяетсяActionBarActivity
. Этот подход требует переписывания совершенно новогоPreferenceActivity
,PreferenceManager
и, возможно,PreferenceFragment
это означает, что вам нужен доступ к скрытым классам, таким какcom.android.internal.util.XmlUtils
. Решение этой проблемы может исходить только от разработчиков Google, реализующих класс,ActionBarWrapper
который можно добавить к любому действию.Если вам действительно нужна деятельность с предпочтениями, мой совет сейчас
ActionBarSherlock
.Однако мне удалось реализовать это здесь .
источник
Предпосылки проблемы:
OP хочет знать, как мы можем поместить
MenuItem
s вActionBar
ofPreferenceActivity
для pre-Honeycomb, потому что в библиотеке поддержки Android есть ошибка, которая не позволяет этому случиться.Мое решение:
Я нашел гораздо более чистый способ, чем уже предлагалось, для достижения цели (и нашел его в Android Docs ):
Теперь сделайте то, что вы обычно делаете в своем
onOptionsItemSelected()
. Поскольку это часть Android Docs, у него нет побочных эффектов.Удачного кодирования. :)
Обновить:
Это решение больше не работает, если вы нацелены на Lollipop. Если вы используете AppCompat, вам следует искать этот ответ.
источник
PreferencesActivity
не было возможности поместить предметы вActionBar
, особенно кнопку возврата. Мой ответ - хорошее решение этой проблемы.:)
Я смог
android.app.Actionbar
использоватьgetActionBar()
. Сначала он вернул нулевое значение ... затем я перешел к манифесту и изменил тему на:Затем у меня снова появилась панель действий. Я предполагаю, что это будет работать только для определенных уровней сборки. Таким образом, вы можете проверить номер сборки или проверить, является ли возвращаемое значение нулевым.
Для меня это будет нормально, потому что приложение, над которым я работаю, предназначено для
ICS/4.0
+.источник
Официальный ответ на эту проблему опубликован. Это библиотека поддержки предпочтений v7 / v14 .
См. Как использовать библиотеку поддержки предпочтений v7 / v14? для обсуждения, как его использовать.
источник