Ich habe eine Aktivität, die PreferenceActivity erweitert. Ich lade Einstellungen aus der XML-Datei. In einigen Fällen muss ich jedoch eine der Einstellungen basierend auf meinem App-Status vollständig vom Bildschirm ausblenden. Es gibt eine setEnabled-Methode, aber es ist nicht genau das, was ich will. Ich möchte diese Einstellung vollständig vom Bildschirm entfernen. Ist es möglich ?
android
preferences
Alex Volovoy
quelle
quelle
setEnabled()
Wenn Sie
Preference
sich innerhalb eines befindenPreferenceCategory
, müssen Sie Folgendes tun:XML:
Java:
quelle
PreferenceCategory
.Für den Fall, dass die Voreinstellung ein direktes untergeordnetes Element des Einstellungsbildschirms ist, finden Sie hier einen eigenständigen Code:
quelle
findPreference
für die Kategorie, und entfernen Sie die Präferenz aus der KategorieWenn Sie etwas möchten, das die Einstellungen dynamisch ändert, z. B. in einer SwitchPreference, habe ich festgestellt, dass es am besten ist, alle meine Unteroptionen in zwei Kategoriecontainer zu packen. Zuerst wird alles angezeigt, dann entfernen Sie einfach die Bits, die Sie nicht möchten. Das Schlaue ist, dass Sie nur eine Neuerstellung auslösen, wenn sich etwas ändert, und dann nichts manuell erstellen oder sich darum kümmern müssen, die Dinge wieder in die richtige Reihenfolge zu bringen.
Der einzige Nachteil, den ich dabei sehen kann, ist ein Blitz, wenn der Bildschirm von Grund auf neu erstellt wird.
quelle
In Ihrer XML-Datei:
In Ihrem Code:
quelle
Wenn Sie PreferenceFragmentCompat verwenden , können Sie die Sichtbarkeit in XML festlegen.
Die Einstellungen in Ihrer XML werden automatisch in AppCompat-Versionen konvertiert. Sie können dann das Attribut ' app: isPreferenceVisible ' in Ihrer XML verwenden
Einstellungen.xml
Das Attribut ist unter https://developer.android.com/guide/topics/ui/settings/components-and-attributes dokumentiert
Das Hinzufügen
PreferenceFragmentCompat
ist unter https://developer.android.com/guide/topics/ui/settings/#inflate_the_hierarchy dokumentiertBeispiel:
quelle
Ich empfehle die Verwendung von v7 Präferenz, es hat
setVisible()
Methode. Aber ich habe es noch nicht versucht. Dementsprechend muss manPreferenceFragment
statt verwendenPreferenceActivity
.quelle
In der XML-Datei können Sie eine versteckte Einstellung vornehmen, indem Sie die Titel- und Zusammenfassungs-Tags leer lassen.
quelle
Hier ist eine generische Methode, die unabhängig davon funktioniert, ob die Einstellung unter a
PreferenceCategory
oder liegtPreferenceScreen
.quelle
Da die Android API 26-
getParent()
Methode verfügbar ist: https://developer.android.com/reference/android/preference/Preference.html#getParent ()Sie können jedoch Folgendes tun:
quelle
Sie können dies auf zwei Arten tun:
1.Wenn Sie die Unterstützungsbibliothek verwenden, können Sie eine Karte des Baums der Einstellungen und ihrer Eltern erstellen und dann eine Präferenz mithilfe ihrer Eltern entfernen. Hier ist eine Funktion zum Generieren einer solchen Karte:
quelle
setVisible()
ist seit Version 24.1.0 der Support-Bibliothek verfügbar.setVisibile()
Methode von Android-X verfügbar ist, was ich zu klären versuchte. Nichts für ungut bitte.Wenn Sie bewerten möchten und basierend auf dieser Maske, kann eine Alternative sein
All dies muss innerhalb sein
quelle
Wenn Sie das tun, was Sie meiner Meinung nach versuchen (weil ich es jetzt versuche), ist es möglicherweise besser, die Einstellung zu aktivieren / deaktivieren. Durch das Entfernen wird es aus dem Einstellungsbildschirm entfernt und Sie können es möglicherweise nicht wieder an der gewünschten Stelle hinzufügen, wenn Sie den Bildschirm programmgesteuert erstellt haben.
pref.setEnabled (false); pref.setEnabled (true);
obwohl dies veraltet sein könnte. Es funktioniert für den Anwendungsfall, den ich gerade durchlaufe.
quelle