Einstellungen anpassen Teil von Android Jetpack
In diesem Dokument wird beschrieben, wie Sie
Preference
-Objekte in Ihrer Hierarchie.
Einstellungen aufrufen
So greifen Sie auf ein einzelnes Preference
zu, beispielsweise beim Abrufen oder Festlegen eines
Wert Preference
, verwenden
PreferenceFragmentCompat.findPreference()
Diese Methode sucht in der gesamten Hierarchie nach einem Preference
mit dem angegebenen Schlüssel.
Um beispielsweise auf ein
EditTextPreference
mit einem
Schlüssel von "signature"
, gehen Sie so vor:
<EditTextPreference app:key="signature" app:title="Your signature"/>
Rufen Sie diese Preference
mit dem folgenden Code ab:
Kotlin
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) val signaturePreference: EditTextPreference? = findPreference("signature") // Do something with this preference. }
Java
@Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); EditTextPreference signaturePreference = findPreference("signature"); // Do something with this preference. }
Sichtbarkeit der Einstellungen verwalten
Sie können festlegen, welche Preference
-Objekte für den Nutzer sichtbar sind, wenn sie
navigiere zu einem Einstellungsbildschirm. Wenn beispielsweise eine bestimmte Preference
nur dann aussagekräftig, wenn eine entsprechende Funktion aktiviert ist, können Sie
Preference
, wenn die Funktion deaktiviert ist.
Damit ein Preference
nur dann angezeigt wird, wenn eine Bedingung erfüllt ist, legen Sie zuerst die Preference
fest.
Sichtbarkeit in der XML auf false, wie im folgenden Beispiel gezeigt:
<EditTextPreference app:key="signature" app:title="Your signature" app:isPreferenceVisible="false"/>
In onCreatePreferences()
wird Preference
angezeigt, wenn die entsprechende
Bedingung erfüllt ist:
Kotlin
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) if(/*some feature*/) { val signaturePreference: EditTextPreference? = findPreference("signature") signaturePreference?.isVisible = true } }
Java
@Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); if(/*some feature*/) { EditTextPreference signaturePreference = findPreference("signature"); if (signaturePreference != null) { signaturePreference.setVisible(true); } } }
Zusammenfassungen dynamisch aktualisieren
Ein Preference
, der Daten enthält, muss den aktuellen Wert in seiner
Zusammenfassung, damit Nutzer den aktuellen Status der
Preference
Ein EditTextPreference
muss beispielsweise den gespeicherten Text anzeigen
und ListPreference
muss den ausgewählten Listeneintrag anzeigen. Sie können auch
haben Preference
Objekte, deren Zusammenfassung basierend auf internen oder
Status einer externen App, z. B. eine Preference
, die eine Version anzeigt
Nummer. Dazu können Sie ein
SummaryProvider
SimpleSummaryProvider verwenden
ListPreference
und
EditTextPreference
einfache SummaryProvider
-Implementierungen enthalten, die automatisch
hat Preference
-Wert als Zusammenfassung gespeichert. Wenn kein Wert gespeichert wird, wird „Keine
festgelegt.“
Um diese Implementierungen aus XML zu aktivieren, legen Sie Folgendes fest:
app:useSimpleSummaryProvider="true"
Alternativ können Sie im Code
ListPreference.SimpleSummaryProvider.getInstance()
und
EditTextPreference.SimpleSummaryProvider.getInstance()
um die einfache SummaryProvider
-Instanz abzurufen und auf der
Preference
, wie im folgenden Beispiel gezeigt:
Kotlin
listPreference.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance() editTextPreference.summaryProvider = EditTextPreference.SimpleSummaryProvider.getInstance()
Java
listPreference.setSummaryProvider(ListPreference.SimpleSummaryProvider.getInstance()); editTextPreference.setSummaryProvider(EditTextPreference.SimpleSummaryProvider.getInstance());
Benutzerdefinierten SummaryProvider verwenden
Sie können Ihre eigene SummaryProvider
erstellen und
provideSummary()
, um die Zusammenfassung anzupassen, wenn sie vom Preference
angefordert wird. Für
Beispiel: Die folgende EditTextPreference
zeigt die Länge der gespeicherten
Wert als Zusammenfassung verwenden:
Nehmen wir als Beispiel die folgende EditTextPreference
an:
<EditTextPreference app:key="counting" app:title="Counting preference"/>
In onCreatePreferences()
können Sie eine neue SummaryProvider
erstellen und überschreiben
provideSummary()
, um die anzuzeigende Zusammenfassung zurückzugeben:
Kotlin
val countingPreference: EditTextPreference? = findPreference("counting") countingPreference?.summaryProvider = SummaryProvider<EditTextPreference> { preference -> val text = preference.text if (text.isNullOrEmpty()) { "Not set" } else { "Length of saved value: " + text.length } }
Java
EditTextPreference countingPreference = findPreference("counting"); if (countingPreference != null) { countingPreference.setSummaryProvider(new SummaryProvider<EditTextPreference>() { @Override public CharSequence provideSummary(EditTextPreference preference) { String text = preference.getText(); if (TextUtils.isEmpty(text) || text == null){ return "Not set"; } return "Length of saved value: " + text.length(); } }); }
In der Zusammenfassung „Preference
“ wird die Länge des gespeicherten Werts oder „Nicht festgelegt“ angezeigt
wenn kein gespeicherter Wert vorhanden ist.
Dialogfeld „EditTextPreference“ anpassen
In einem EditTextPreference
-Dialogfeld können Sie das Textfeldverhalten anpassen, indem Sie
Anhängen eines
OnBindEditTextListener
Dieser Listener wird aufgerufen, wenn dem Nutzer das Dialogfeld angezeigt wird.
Beispielsweise können Sie ein Dialogfeld so anpassen, dass nur Zahlen akzeptiert werden. Erstellen Sie zuerst
EditTextPreference
:
<EditTextPreference app:key="number" app:title="Numbers only preference"/>
Erstellen Sie als Nächstes in onCreatePreferences()
eine neue OnBindEditTextListener
und
onBindEditText()
überschreiben, um EditText
anzupassen, wenn sie dem
Nutzer.
Kotlin
val numberPreference: EditTextPreference? = findPreference("number") numberPreference?.setOnBindEditTextListener { editText -> editText.inputType = InputType.TYPE_CLASS_NUMBER }
Java
EditTextPreference numberPreference = findPreference("number"); if (numberPreference != null) { numberPreference.setOnBindEditTextListener( new EditTextPreference.OnBindEditTextListener() { @Override public void onBindEditText(@NonNull EditText editText) { editText.setInputType(InputType.TYPE_CLASS_NUMBER); } }); }
Wenn der Nutzer das Dialogfeld sieht, öffnet sich die Tastatur nun in numerischer Form
Modus, sodass der Nutzer nur Zahlen in die EditText
eingeben kann.
Aktionen für Einstellungen
Ein Preference
kann beim Antippen eine bestimmte Aktion ausführen. Beispiel:
Preference
kann als Link zu einem separaten Teil deiner App fungieren. So fügen Sie eine Aktion hinzu:
mit einem Preference
verknüpft sind, können Sie direkt im Preference
eine Intent
festlegen.
kann Folgendes festlegen:
OnPreferenceClickListener
für eine spezifischere Logik.
Intent festlegen
Sie können einen Intent
auf einem Preference
festlegen, um einen neuen Fragment
zu starten.
Activity
oder eine separate App verwenden, wenn Preference
angetippt wird. Dies ist die
wie bei der Verwendung von
Context.startActivity()
mit einem bestimmten Intent
.
Du kannst ein Intent
in XML mit einem verschachtelten <intent>
-Tag festlegen. Die folgenden
In diesem Beispiel wird ein Intent
definiert, das ein Activity
startet:
<Preference app:key="activity" app:title="Launch activity"> <intent android:targetPackage="com.example" android:targetClass="com.example.ExampleActivity"/> </Preference>
Alternativ können Sie setIntent()
so direkt für Preference
verwenden:
Kotlin
val intent = Intent(context, ExampleActivity::class.java) activityPreference.setIntent(intent)
Java
Intent intent = new Intent(getContext(), ExampleActivity.class); activityPreference.setIntent(intent);
Sie können Extras auch mit einem Intent
unter Verwendung von XML einfügen:
<Preference app:key="activity" app:title="Launch activity"> <intent android:targetPackage="com.example" android:targetClass="com.example.ExampleActivity"> <extra android:name="example_key" android:value="example_value"/> </intent> </Preference>
Hier ein Beispiel für ein Preference
mit einem Intent
, das eine Webseite aufruft:
<Preference app:key="webpage" app:title="View webpage"> <intent android:action="android.intent.action.VIEW" android:data="http://www.google.com" /> </Preference>
Kotlin
val intent = Intent(Intent.ACTION_VIEW) intent.data = Uri.parse("http://www.google.com") val webpagePreference = findPreference("webpage") webpagePreference?.intent = intent
Java
Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.google.com")); webpagePreference.setIntent(intent);
OnPreferenceClickListener
Sie können ein OnPreferenceClickListener
auf einem Preference
festlegen, wodurch ein
Callback von onPreferenceClick()
an, wenn auf Preference
getippt wird. Beispiel:
Mit dem Listener können Sie zu einer anderen Fragment
oder Activity
wechseln, wenn Sie
eine komplexere Logik
für die Navigation haben.
Zum Festlegen eines OnPreferenceClickListener
verwenden Sie Code ähnlich dem folgenden:
Kotlin
onClickPreference.setOnPreferenceClickListener({ // Do something. true })
Java
onClickPreference.setOnPreferenceClickListener(preference -> { // Do something. return true; });