Mam działanie, które rozszerza PreferenceActivity. Ładuję preferencje z pliku xml. Ale w niektórych przypadkach muszę całkowicie ukryć jedną z preferencji na ekranie na podstawie stanu mojej aplikacji. Istnieje metoda setEnabled, ale nie jest to dokładnie to, czego chcę. Chcę całkowicie usunąć tę preferencję z ekranu. Czy to możliwe ?
android
preferences
Alex Volovoy
źródło
źródło
setEnabled()
Jeśli
Preference
znajdujesz się w aPreferenceCategory
, musisz to zrobić:XML:
Jawa:
źródło
PreferenceCategory
.W przypadku, gdy preferencja jest bezpośrednim elementem podrzędnym ekranu preferencji, poniżej znajduje się samodzielny kod:
źródło
findPreference
dla kategorii i usuń preferencję z kategoriiJeśli chcesz czegoś, co dynamicznie zmieni preferencje, na przykład w SwitchPreference, znalazłem najlepszy sposób, aby umieścić wszystkie moje opcje podrzędne w dwóch kontenerach kategorii. Początkowo będziesz miał wszystko pokazane, a potem po prostu usuniesz niepotrzebne fragmenty. Sprytne jest to, że po prostu uruchamiasz odtwarzanie, gdy coś się zmienia, a potem nie musisz niczego ręcznie tworzyć ani martwić się o umieszczenie rzeczy z powrotem we właściwej kolejności.
Jedynym minusem, jaki widzę w tym, jest flash, ponieważ ekran jest odtwarzany od zera.
źródło
W pliku XML:
W swoim kodzie:
źródło
Jeśli używasz PreferenceFragmentCompat , możesz ustawić widoczność w xml.
Preferencje w Twoim xml zostaną automatycznie przekonwertowane na wersje AppCompat. Następnie możesz użyć atrybutu „ app: isPreferenceVisible ” w swoim pliku XML
preferencje.xml
Atrybut jest udokumentowany pod adresem https://developer.android.com/guide/topics/ui/settings/components-and-attributes
Dodawanie
PreferenceFragmentCompat
jest udokumentowane na https://developer.android.com/guide/topics/ui/settings/#inflate_the_hierarchyPrzykład:
źródło
Polecam korzystanie z preferencji v7, ma
setVisible()
metodę. Ale jeszcze tego nie próbowałem. W związku z tym musisz użyćPreferenceFragment
zamiastPreferenceActivity
.źródło
W pliku XML możesz ustawić ukryte preferencje, pozostawiając tytuł i tagi podsumowania puste.
źródło
Oto ogólny sposób na zrobienie tego, który działa niezależnie od tego, czy preferencja jest pod a,
PreferenceCategory
czyPreferenceScreen
.źródło
Ponieważ
getParent()
dostępna jest metoda Android API 26 : https://developer.android.com/reference/android/preference/Preference.html#getParent ()Chociaż możesz wykonać następujące czynności:
źródło
Możesz to zrobić na dwa sposoby:
Jeśli korzystasz z biblioteki wsparcia, możesz zbudować mapę drzewa preferencji i ich rodziców, a następnie usunąć preferencję, używając jej rodzica. Oto funkcja do wygenerowania takiej mapy:
źródło
setVisible()
jest dostępny od wersji 24.1.0 biblioteki Wsparcia.setVisibile()
metoda była dostępna w systemie Android-x, co próbowałem wyjaśnić. Bez obrazy, proszę.Jeśli chcesz ocenić i na podstawie tej maski, może być alternatywą
Wszystko to musi być w środku
źródło
Jeśli robisz to, co myślę, że próbujesz zrobić (ponieważ próbuję to zrobić teraz), może być lepiej włączyć / wyłączyć tę preferencję. Ponieważ usunięcie go usuwa go z ekranu preferencji i możesz nie być w stanie dodać go tam, gdzie chcesz, jeśli utworzyłeś ekran programowo.
pref.setEnabled (false); pref.setEnabled (true);
chociaż może to być przestarzałe. Działa w przypadku użycia, przez który teraz przechodzę.
źródło