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:
<ph type="x-smartling-placeholder">EditTextPreference.
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; });