So codieren Sie einen Einstellungsbildschirm in einer Android-App

Was Sie erstellen werden

Das Materialdesign-Team von Google gibt eine klare Definition der Einstellungen in Ihrer Android-App:

App-Einstellungen lassen Benutzer Präferenzen für das Verhalten einer App angeben.

Google gibt außerdem an, dass Ihre Nutzer entweder über die Seitennavigation oder über das Symbolleistenmenü mit den gekennzeichneten Elementen zu den App-Einstellungen navigieren sollten die Einstellungen

Durch das Hinzufügen von Einstellungen in Ihre App können Ihre Benutzer einige Funktionen der App steuern. Dies macht Ihre Benutzer glücklich, anstatt wütend zu sein, weil sie jetzt steuern, wie sich die App verhält. 

Es wird dringend empfohlen, Zugriff auf die App-Einstellungen zu gewähren. Dies führt zu einer besseren Benutzererfahrung für Ihre Nutzer, was zu einer besseren Überprüfung im Google Play Store führt, was schließlich zu einer höheren Anzahl von App-Downloads führt (was den Umsatz erhöht).. 

Ich gehe davon aus, dass Sie mit den Einstellungen einer App auf Ihrem Gerät interagiert haben müssen, z. B. indem Sie einen Standardklingelton auswählen oder Ihre Privatsphäre in der App kontrollieren. Nahezu alle der beliebtesten Apps, die Sie heruntergeladen oder im Google Play Store heruntergeladen haben, enthalten einen Einstellungsbildschirm, über den Sie das Verhalten der Anwendung steuern können. 

Ein Beispiel für eine beliebte App, die über einen Einstellungsbildschirm verfügt, ist die Chrome Android-App von Google. Im Einstellungsbildschirm dieser App können Benutzer die Standardsuchmaschine auswählen, das Benachrichtigungsverhalten ändern, die Privatsphäre der Benutzer steuern usw. Sie können dies selbst sehen, indem Sie die Chrome-App aus dem Google Play Store herunterladen (sofern Sie sie noch nicht installiert haben) Ihr Gerät). Der folgende Screenshot stammt aus der Chrome-App und zeigt den Einstellungsbildschirm der App an.

In diesem Beitrag erfahren Sie, wie Sie einen App-Einstellungsbildschirm von Grund auf erstellen und die Werte lesen, die der Benutzer aus den App-Einstellungen ausgewählt hat. Für einen zusätzlichen Bonus erfahren Sie auch, wie Sie die Android Studio-Vorlagenfunktion verwenden, um Ihr Projekt schnell mit einem Einstellungsbildschirm zu booten. 

Ein Beispielprojekt (in Kotlin) für dieses Lernprogramm finden Sie in unserem GitHub-Repo, sodass Sie es einfach mitverfolgen können.

Voraussetzungen

Um diesem Tutorial folgen zu können, benötigen Sie:

  • Grundkenntnisse einiger Android-APIs (z. B. Gemeinsame Einstellungen)
  • Android Studio 3.0 oder höher
  • Kotlin Plugin 1.1.51 oder höher

1. Erstellen Sie ein Android Studio-Projekt

Starten Sie Android Studio und erstellen Sie ein neues Projekt (Sie können es benennen.) SettingsScreenDemo) mit einer leeren Aktivität aufgerufen EinstellungenAktivität. Überprüfen Sie auch das Kotlin-Unterstützung einschließen Kontrollkästchen. 

2. Erstellen eines PreferenceFragment

Zur Unterstützung von API Level 11 (Honeycomb) und höher können wir die PreferenceFragment. Diese Klasse ist einfach eine Fragment das zeigt eine Hierarchie von Präferenz Objekte als Listen.

import android.os.Bundle import android.preference.PreferenceFragment import android.support.v7.app.AppCompatActivity-Klasse SettingsActivity: AppCompatActivity () override fun onCreate (savedInstanceState: Bündel?) super.onCreate (savedInstanceState) (android.R.id.content) == null) fragmentManager.beginTransaction () .add (android.R.id.content, SettingsFragment ()). commit () class SettingsFragment: PreferenceFragment () override fun onCreate (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) addPreferencesFromResource (R.xml.preferences)

Im obigen Code haben wir eine verschachtelte Klasse erstellt SettingsFragment Innerhalb EinstellungenAktivität (weil der EinstellungenFragment Klasse ist so klein). Beachten Sie, dass unsere Klasse SettingsFragment erweitert das PreferenceFragment Superklasse und hat eine Methode addPrerenceFromResource Innerhalb onCreate (). In dieser Methode haben wir ihm eine Ressourcen-ID gegeben R.xml. Vorzug von der Präferenz XML zu starten, wenn die Fragment wird geladen Zum Schluss hosten wir das Fragment durch einfaches Verwenden von FragmentTransaction um es dem UI-inside hinzuzufügen onCreate () von EinstellungenAktivität.

3. Erstellen unserer Präferenzen

Erstellen Sie eine XML-Datei und benennen Sie sie preferences.xml. Speichern Sie diese Datei im res / xml Verzeichnis in Ihrem App-Projekt. Beachten Sie, dass Sie dieser Datei einen beliebigen Namen geben können. Es wird jedoch dringend empfohlen, den herkömmlichen Namen "preferences" beizubehalten. Außerdem sollten Sie normalerweise nur eine solche Datei in einem App-Projekt haben.

       

Der Wurzelknoten für unsere Präferenzen.xml Datei sollte eine Element. In diesem Wurzelelement haben wir jetzt unser Individuum Präferenz. Hier sind die allgemeinen Attribute, die mit a verbunden sind Präferenz:

  • android: schlüssel: Dieses Attribut wird verwendet, um den Wert in zu erhalten Gemeinsame Einstellungen Objekt.
  • android: titel: setzt den Titel für die Präferenz. Dies ist der fette Text.
  • android: zusammenfassung: Legt die Zusammenfassung für das fest Präferenz (dies ist nicht erforderlich). Dies ist der verblichene Text unter dem Titel.
  • android: defaultValue: setzt den Standardwert für die Präferenz

Wir gehen jeden durch Präferenz Wir haben uns in Kürze definiert. Beachten Sie, dass Sie auch eine hinzufügen oder anpassen können Präferenz über den Einstellungseditor von Android Studio - ähnlich dem Layoutressourceneditor, mit dem Sie bereits vertraut sind. Sie können entweder Ihre bevorzugte XML-Datei direkt im "Text" -Modus hinzufügen oder bearbeiten oder die Drag & Drop-Benutzeroberfläche im "Design" -Modus verwenden.

Wie Sie sehen können, können Sie in diesem Editor beliebige ziehen Präferenz in der Palette (auf der linken Seite). Nach dem Ablegen sollten Sie es auswählen und seine Attribute im Attributfenster (auf der rechten Seite) des Editors ändern. Beachten Sie, dass wir standardmäßig einige Attribute zum Ändern erhalten. Um alle mit einem ausgewählten Attribut verknüpften Attribute anzuzeigen oder zu ändern Präferenz, Stellen Sie sicher, dass Sie auf klicken Alle Attribute anzeigen Link unten im Attributfenster. Dies ist dem Layout-Editor, den Sie bereits kennen, sehr ähnlich. 

Gehen wir nun durch die einzelnen Präferenz Entitäten, die wir haben. 

Kontrollkästchen-Voreinstellung

EIN CheckBoxPreference ist einfach ein CheckBox Widget, das im Einstellungsbildschirm enthalten ist. Diese Präferenz gibt den Wert "true" zurück, wenn diese Option aktiviert ist, andernfalls "false". Mit anderen Worten, es wird abhängig vom Status des Widgets ein Boolescher Wert zurückgegeben.

Andere Attribute, die Sie zu einem hinzufügen können CheckBoxPreference sind:

  • android: summaryOff: Legt die Zusammenfassung für das fest Präferenz in einem Einstellungsbildschirm, wenn es nicht markiert ist.
  • android: summaryOn: Legt die Zusammenfassung für das fest Präferenz in einem Einstellungsbildschirm, wenn es markiert ist.
  • android: disableDependentsState: Der Status (true für on oder false für off), der dazu führt, dass abhängige Personen deaktiviert werden. Kann ein boolescher Wert sein, z. B. "true" oder "false"..

Präferenz wechseln

SwitchPreference führt eine ähnliche Funktionalität wie der aus CheckBoxPreference. Es bietet eine umschaltbare Option mit zwei Zuständen ("ein" oder "aus"). Dies verwendet a Schalter Widget, mit dem der Benutzer nach links ("aus") und nach rechts ("ein") gleiten kann. Diese Präferenz enthält auch die für die CheckBoxPreference über. Darüber hinaus hat es die folgenden Attribute:

  • android: switchTextOff: Setzt den Text, der auf dem Switch selbst verwendet wird, wenn er sich im ausgeschalteten Zustand befindet. 
  • android: switchTextOn: setzt den Text, der auf dem Switch selbst verwendet wird, wenn er sich im Zustand "Ein" befindet. 

EditText-Voreinstellung

Diese Präferenz, Wenn Sie darauf klicken, wird ein Dialogfeld angezeigt, in dem der Benutzer einen Eingabetext eingeben kann. Es verwendet die Text bearbeiten Widget, einschließlich aller Attribute dieses Widgets, mit denen Sie bereits vertraut sind.

Beachten Sie, dass der Wert im gespeichert ist Gemeinsame Einstellungen ist eine Zeichenfolge.


Listeneinstellung

Diese Art von Präferenz zeigt eine Liste der Einträge in einem Dialog an, wenn Sie auf tippen. Hier können Sie ein Paar von String-Array-Ressourcen in Ihrem bevorzugten XML-Format angeben. Diese String-Array-Ressource enthält lediglich eine Sammlung von Strings. Diese Ressource befindet sich unter res / values ​​/ arrays.xml.

   15 Minuten 30 Minuten 1 Stunde 3 Stunden 6 Stunden noch nie   fünfzehn 30 60 180 360 -1  

Hier ist unser Beispiel ListPreference mit dieser Ressource. 

Die Einträge und Eingabewerte setzen wir mit Android: Einträge und android: entryValues Attribute jeweils.

  • Android: Einträge: Das lesbare Array, das als Liste dargestellt werden soll.
  • android: entryValues: das Array, um den Wert zu finden, der für eine Präferenz gespeichert werden soll, wenn ein Eintrag aus Einträgen ausgewählt wird.

Wenn wir beispielsweise die Anzahl der Minuten in jeder Dauer als Eingabewerte verwenden und der Benutzer eine Zeitdauer (z. B. 30 Minuten) auswählt, wird der entsprechende ganzzahlige Wert in gespeichert Gemeinsame Einstellungen (z. B. 30).

MultiSelect-Listeneinstellung

Dieser ist ähnlich ListPreference Anstelle von Optionsfeldern haben wir Kontrollkästchen. Der Benutzer kann also mehrere Elemente im Dialog auswählen. Beachten Sie, dass das Ergebnis in einer "Zeichenfolge" in gespeichert wird Gemeinsame Einstellungen. Dies kann mit abgerufen werden getStringSet ().

Klingeltoneinstellung

Wenn ein RingtonePreference Wenn Sie auf tippen, wird ein Dialogfeld mit der Liste der verfügbaren Klingeltöne auf dem Gerät oder Emulator angezeigt.

  • android: showDefault: ob die Standardklingelton Option wird angezeigt.
  • android: showSilent: ob a Leise Option wird in der Liste angezeigt. Der Benutzer kann diese Option auswählen, wenn er keinen Klingelton wiedergeben möchte.  

Beachten Sie, dass der Wert im gespeichert ist Gemeinsame Einstellungen für diese Präferenz ist eine spezielle Zeichenfolge. Diese spezielle Zeichenfolge ist ein URI, der auf a zeigt Inhalt Anbieter.

4. Einstellungsgruppen erstellen

Es wird zu einem Problem, wenn Sie eine lange Liste von Voreinstellungen oder Einstellungen haben, da Benutzer Probleme beim Scannen oder Verstehen haben. Um dieses Problem zu lösen, können wir unsere Präferenzen gruppieren. Schauen Sie sich den Screenshot der Chrome-App an, die ich Ihnen am Anfang gezeigt habe. Beachten Sie, dass die Einstellungen in zwei Kategorien unterteilt wurden: Grundlagen und Erweitert. Dies macht es dem Benutzer leichter, die Präferenzen zu verstehen und die Liste nicht zu überwältigend erscheinen zu lassen.

Sehen wir uns nun an, wie einfach es ist, diese Aufgabe auszuführen.

      

Wir umgeben einfach die Präferenzen, die wir in einer Gruppe zusammenfassen möchten kennzeichnen und jeder Gruppe einen Titel geben mit android: titel Attribut.

5. Eine Absicht beginnen

Beachten Sie, dass es möglich ist, eine Aktivität zu öffnen, indem Sie einfach auf ein Einstellungselement im Einstellungsbildschirm klicken. Dies kann hilfreich sein, wenn Sie eine Webseite öffnen möchten. Hier ist der Code dafür:

  

Hier haben wir ein hinzugefügt Element innerhalb der Element. 

  • android: aktion: Legt die Aktion für den Intent fest (dies ähnelt dem Aufruf setAction () auf einem Absichtsobjekt). 
  • android: targetClass: Legt den Klassenteil des Komponentennamens fest (entspricht dem Aufruf) setComponent () auf einem Absichtsobjekt).
  • android: targetPackage: Legt den Paketteil des Komponentennamens fest.
  • android: daten: Legt die zuzuweisenden Daten fest (wie beim Aufrufen) setData () auf einem Absichtsobjekt). 

Um eine Webseite zu öffnen, können Sie beispielsweise Folgendes verwenden:

  

6. Binden Sie die Voreinstellungszusammenfassung an den ausgewählten Wert

Lassen Sie uns nun sehen, wie die Voreinstellungszusammenfassung mit dem vom Benutzer ausgewählten Wert aktualisiert wird. 

class SettingsActivity: AppCompatActivity () //… class SettingsFragment: PreferenceFragment () fun onCreate überschreiben (savedInstanceState: Bundle?) super.onCreate (savedInstanceState) addPreferencesFromResource (R.xml.preferences) bindPreferenceSummaryToValue (findPreference ("text")) bindPreferenceSummaryToValue (findPreference ("list")) //…

In dieser Klasse haben wir eine Hilfsmethode erstellt bindPreferenceSummaryToValue (), In unserem Begleitobjekt befindet sich der Präferenzzusammenfassungstext mit dem vom Benutzer ausgewählten Wert. Wir haben es a bestanden Präferenz Objekt als Argument. Das findPreference () wird ein zurückkehren Präferenz Verwendung der PräferenzSchlüssel. 

class SettingsActivity: AppCompatActivity () //… Begleitobjekt / ** * Ein Änderungslistener für Voreinstellungswerte, der die Zusammenfassung der Voreinstellung * aktualisiert, um den neuen Wert anzuzeigen. * / private val sBindPreferenceSummaryToValueListener = Preference.OnPreferenceChangeListener Voreinstellung, Wert -> Val stringValue = value.toString () if (Voreinstellung ist ListPreference) // Bei den Voreinstellungen der Liste in // den Einträgen der Voreinstellung nachschauen Liste. val listPreference = Voreinstellung val index = listPreference.findIndexOfValue (stringValue) // Setzt die Zusammenfassung auf den neuen Wert. pref.setSummary (if (index> = 0) listPreference.entries [index] else null) else if (Voreinstellung ist RingtonePreference) // Ringtone-Voreinstellungen finden Sie im RingtoneManager nach den korrekten Anzeigewerten. if (TextUtils.isEmpty (stringValue)) // Leere Werte entsprechen 'silent' (kein Klingelton). Prefer.setSummary ("Silent") else val ringtone = RingtoneManager.getRingtone (Prefer.getContext (), Uri.parse (stringValue)) if (ringtone == null) // Lösche die Zusammenfassung, wenn ein Suchfehler aufgetreten ist . preferences.setSummary (null) else // Setzt die Zusammenfassung so, dass sie den neuen // Rufnamen enthält. val name = ringtone.getTitle (Preference.getContext ()) Preference.setSummary (Name) else // Für alle anderen Voreinstellungen setzen Sie die Zusammenfassung auf die // einfache Zeichenfolgendarstellung des Werts. Prefer.summary = stringValue true private fun bindPreferenceSummaryToValue (Einstellung: Preference) // Legt fest, dass der Listener auf Wertänderungen achtet. Prefer.onPreferenceChangeListener = sBindPreferenceSummaryToValueListener // Löst den Listener sofort mit dem aktuellen Wert der Einstellung aus. sBindPreferenceSummaryToValueListener.onPreferenceChange (Einstellung, PreferenceManager .getDefaultSharedPreferences (Einstellung.Kontext) .getString (Einstellung.key, ""))

Wir haben eine Variable sBindPreferenceSummaryToValueListener Das ist ein Beispiel von Preference.OnPreferenceChangeListener. Dies ist einfach ein Listener für Voreinstellungsänderungen, der uns dabei hilft, die Voreinstellungszusammenfassung auf den vom Benutzer ausgewählten Wert zu aktualisieren. Wir prüfen, ob Sonderfälle vorliegen, beispielsweise wenn a ausgewählt ist RingtonePreference oder ein ListPreference. Für diese Präferenztypen nehmen wir eine spezielle Behandlung vor, um die Zusammenfassungszeichenfolge zu erhalten. Wenn die Präferenz keine ist (wie ein EditTextPreference), setzen wir die Zusammenfassung einfach auf den String-Wert der Einstellung. 

In der bindPreferenceSummaryToValue (), Wir legen den Voreinstellungsänderungslistener durch Aufruf fest onPreferenceChangeListener (in Java ist es setOnPreferenceChangeListener stattdessen auf der Präferenz Objekt. 

Führen Sie das Projekt jetzt erneut aus, um zu sehen, wie alles funktioniert!

7. Präferenzwerte abrufen

Um Einstellungswerte für den Einstellungsbildschirm zu erhalten, rufen wir auf getDefaultSharedPreference () was ist in der PreferenceManager Klassenübergabe a Kontext Objekt der Präferenzen, deren Werte gewünscht werden. Beachten Sie, dass wir die Werte von der Standardeinstellung erhalten Gemeinsame Einstellungen für unsere anwendung. 

val prefs = PreferenceManager.getDefaultSharedPreferences (this) prefs.getBoolean ("Ankreuzfeld", false) .toString () prefs.getString ("Klingelton", ")") prefs.getString (" text ","") prefs.getString (" Liste ","")

Sie rufen die entsprechende Getter-Methode für den Typ auf, aus dem der Wert in abgerufen werden soll Gemeinsame Einstellungen. Sie übergeben den Schlüssel als erstes Argument und der Standardwert ist das zweite Argument. 

8. Bonus: Verwenden von Android Studio-Vorlagen

Nachdem Sie nun die APIs kennen gelernt haben, die für die Erstellung eines Einstellungsbildschirms in Android von Grund auf erforderlich sind, zeige ich Ihnen eine Verknüpfung, die beim nächsten Mal schneller geht. Sie können eine Vorlage verwenden, anstatt einen Einstellungsbildschirm von Grund auf zu kodieren. 

Android Studio bietet Codevorlagen, die den bewährten Vorgehensweisen von Android beim Design und der Entwicklung entsprechen. Diese vorhandenen Code-Vorlagen (verfügbar in Java und Kotlin) können Ihnen dabei helfen, Ihr Projekt schnell zu starten. Mit einer solchen Vorlage können Sie einen Einstellungsbildschirm erstellen. 

Um diese praktische Funktion für ein neues Projekt zu verwenden, starten Sie zunächst Android Studio.

Geben Sie den Anwendungsnamen ein und klicken Sie auf Nächster Taste. Sie können die Standardeinstellungen so belassen, wie sie im Ziel Android-Geräte Dialog. 

Drücke den Nächster Taste erneut.

In dem Hinzufügen eine Aktivität für das Handy blättern Sie nach unten und wählen Sie Einstellungen Aktivität. Drücke den Nächster Taste danach. 

Im letzten Dialogfeld können Sie den Aktivitätsnamen, den Layoutnamen oder den Titel umbenennen, wenn Sie möchten. Zum Schluss klicken Sie auf Fertig Taste, um alle Konfigurationen zu akzeptieren. 

Android Studio hat uns jetzt dabei geholfen, ein Projekt mit einer Einstellungsaktivität zu erstellen. Wirklich cool! Es wird dringend empfohlen, den generierten Code zu untersuchen. 

Sie können Vorlagen auch für ein bereits vorhandenes Android Studio-Projekt verwenden. Einfach auf gehen Datei> Neu> Aktivität> Einstellungen.  

Beachten Sie, dass die im Lieferumfang von Android Studio enthaltenen Vorlagen für einfache Layouts und das Erstellen einfacher Apps geeignet sind. Wenn Sie jedoch Ihre App wirklich in Schwung bringen möchten, sollten Sie einige der von Envato Market verfügbaren App-Vorlagen in Betracht ziehen. 

Sie sparen viel Zeit für erfahrene Entwickler und helfen ihnen, den Slog der Erstellung einer App von Grund auf zu durchbrechen und sich stattdessen auf die einzigartigen und angepassten Teile der Erstellung einer neuen App zu konzentrieren

Fazit

In diesem Lernprogramm haben Sie erfahren, wie Sie App-Einstellungen in Android von Grund auf erstellen. Wir haben auch untersucht, wie Sie mit den Android Studio-Vorlagen App-Einstellungen einfach und schnell erstellen können. 

Ich empfehle Ihnen dringend, die offiziellen Richtlinien für das Materialdesign für Einstellungen zu lesen, um mehr darüber zu erfahren, wie Sie Einstellungen in Android richtig entwerfen und verwenden. Lesen Sie auch das offizielle API-Handbuch, um mehr über andere APIs zum Erstellen einer Einstellungsaktivität zu erfahren. 

Weitere Informationen zum Codieren für Android finden Sie in Envato Tuts. Hier finden Sie einige unserer anderen Kurse und Tutorials+!