У меня есть деятельность, которая расширяет PreferenceActivity. Я загружаю настройки из файла XML. Но в некоторых случаях мне нужно полностью скрыть одно из предпочтений на экране в зависимости от состояния моего приложения. Есть метод setEnabled, но это не совсем то, что я хочу. Я хочу полностью удалить это предпочтение с экрана. Является ли это возможным ?
android
preferences
Алекс Воловой
источник
источник
setEnabled()
Если вы находитесь в
Preference
пределахPreferenceCategory
, вы должны сделать это:XML:
Ява:
источник
PreferenceCategory
.В случае, когда предпочтение является прямым потомком экрана предпочтений, вот некоторый автономный код:
источник
findPreference
для категории, и удалить предпочтение из категорииЕсли вы хотите что-то, что будет динамически изменять префиксы, например, в SwitchPreference, я обнаружил, что лучший способ - поместить все мои подопции в контейнеры двух категорий. Сначала вы увидите все, а затем удалите ненужные биты. Умный момент: вы просто запускаете пересоздание, когда что-то меняется, и тогда вам не нужно ничего создавать вручную или беспокоиться о том, чтобы вернуть вещи в правильном порядке.
Единственный недостаток, который я могу видеть с этим, - это вспышка, поскольку экран воссоздан с нуля.
источник
В вашем XML-файле:
В вашем коде:
источник
Если вы используете PreferenceFragmentCompat, вы можете установить видимость в xml.
Настройки в вашем xml будут автоматически преобразованы в версии AppCompat. Затем вы можете использовать атрибут app: isPreferenceVisible в своем XML
preferences.xml
Атрибут задокументирован по адресу https://developer.android.com/guide/topics/ui/settings/components-and-attributes.
Добавление
PreferenceFragmentCompat
задокументировано по адресу https://developer.android.com/guide/topics/ui/settings/#inflate_the_hierarchyПример:
источник
Я рекомендую использовать предпочтение v7, у него есть
setVisible()
метод. Но я еще не пробовал. Соответственно вы должны использоватьPreferenceFragment
вместоPreferenceActivity
.источник
В файле XML вы можете сделать скрытые предпочтения, оставив теги заголовка и резюме пустыми.
источник
Вот общий способ сделать это, который работает независимо от того, находится ли предпочтение под
PreferenceCategory
илиPreferenceScreen
.источник
Поскольку Android API 26
getParent()
доступен метод: https://developer.android.com/reference/android/preference/Preference.html#getParent ()Хотя вы можете сделать следующее:
источник
Вы можете сделать это двумя способами:
1.Если вы используете библиотеку поддержки, вы можете построить карту дерева предпочтений и их родителей, а затем удалить предпочтение с помощью его родителя. Вот функция для генерации такой карты:
источник
setVisible()
доступен начиная с версии 24.1.0 библиотеки поддержки.setVisibile()
метод доступен с Android-X, который я пытался уточнить. Без обид, пожалуйста.Если вы хотите оценить, и на основе этой маски, альтернативой может быть
Все это должно быть в пределах
источник
Если вы делаете то, что, я думаю, вы пытаетесь сделать (потому что я пытаюсь сделать это сейчас), возможно, было бы лучше включить / отключить настройку. Потому что его удаление убирает его с экрана настроек, и вы не сможете добавить его туда, где вы хотите, если вы сделали экран программным способом.
pref.setEnabled (ложь); pref.setEnabled (истина);
хотя это может быть устаревшим. Это работает для варианта использования, который я сейчас рассматриваю.
источник