Paramètres Inclus dans Android Jetpack.
Les paramètres permettent aux utilisateurs de modifier les fonctionnalités et le comportement d'une application. Ils peuvent affecter le comportement en arrière-plan, comme la fréquence à laquelle l'application synchronise les données avec le cloud, ou ont une portée plus large (par exemple, en modifiant le contenu et la présentation de l'interface utilisateur).
Pour intégrer des paramètres configurables par l'utilisateur dans votre application, utilisez la bibliothèque AndroidX Preference. Cette bibliothèque gère l'interface utilisateur et interagit avec le stockage afin que vous ne définissiez que les paramètres individuels que l'utilisateur peut configurer. La bibliothèque est fournie avec un thème Material Design qui offre une expérience utilisateur cohérente sur l'ensemble des appareils et des versions d'OS.
Premiers pas
Un Preference
est l'élément de base de la bibliothèque des préférences. Un écran de paramètres contient une hiérarchie Preference
. Vous pouvez définir cette hiérarchie en tant que ressource XML ou créer une hiérarchie dans le code.
Les sections suivantes décrivent comment créer un écran de paramètres simple à l'aide de la bibliothèque de préférences AndroidX.
Avant de commencer, ajoutez la dépendance de la bibliothèque des préférences à votre fichier build.gradle
:
Groovy
dependencies { implementation "androidx.preference:preference-ktx:1.2.0" }
Kotlin
dependencies { implementation("androidx.preference:preference-ktx:1.2.0") }
Après une synchronisation Gradle, vous pouvez passer à la partie XML de la tâche.
Créer une hiérarchie
Dans votre projet, accédez au dossier res/xml
, créez un fichier preferences.xml
et ajoutez-y le code suivant:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> <Preference app:key="feedback" app:title="Send feedback" app:summary="Report technical issues or suggest new features"/> </PreferenceScreen>
Cette hiérarchie contient deux objets Preference
: un SwitchPreferenceCompat
qui permet aux utilisateurs d'activer et de désactiver un paramètre, et un Preference
de base sans widget.
Lors de la création d'une hiérarchie, chaque Preference
doit avoir une clé unique.
Gonfler la hiérarchie
Pour gonfler une hiérarchie à partir d'un attribut XML, créez un PreferenceFragmentCompat
, remplacez onCreatePreferences()
et fournissez la ressource XML à gonfler, comme illustré dans l'exemple suivant:
Kotlin
class MySettingsFragment : PreferenceFragmentCompat() { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.preferences, rootKey) } }
Java
public class MySettingsFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.preferences, rootKey); } }
Vous pouvez ensuite ajouter ce Fragment
à votre Activity
comme vous le feriez avec tout autre Fragment
:
Kotlin
class MySettingsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) supportFragmentManager .beginTransaction() .replace(R.id.settings_container, MySettingsFragment()) .commit() } }
Java
public class MySettingsActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportFragmentManager() .beginTransaction() .replace(R.id.settings_container, new MySettingsFragment()) .commit(); } }
Le résultat est illustré dans l'image suivante:
Surveiller les préférences
Vous pouvez obtenir un événement lorsqu'une préférence change en enregistrant un écouteur pour celle-ci:
Kotlin
findPreference<SwitchPreferenceCompat>("notifications") ?.setOnPreferenceChangeListener { _, newValue -> Log.d("Preferences", "Notifications enabled: $newValue") true // Return true if the event is handled. } findPreference<Preference>("feedback") ?.setOnPreferenceClickListener { Log.d("Preferences", "Feedback was clicked") true // Return true if the click is handled. }
Java
SwitchPreferenceCompat notificationsPref = findPreference("notifications"); if (notificationsPref != null) { notificationsPref.setOnPreferenceChangeListener((preference, newValue) -> { Log.d("Preferences", String.format("Notifications enabled: %s", newValue)); return true; // Return true if the event is handled. }); } Preference feedbackPref = findPreference("feedback"); if (feedbackPref != null) { feedbackPref.setOnPreferenceClickListener((preference) -> { Log.d("Preferences", "Feedback was clicked"); return true; // Return true if the event is handled. }); }
Lire la valeur de préférence actuelle
PreferenceFragmentCompat
masque une grande partie de la mécanique impliquée dans l'enregistrement et la lecture des préférences. Toutefois, tout est stocké à l'aide de SharedPreferences
, et vous pouvez lire ces valeurs comme vous le feriez normalement avec SharedPreferences
:
Kotlin
val preferences = PreferenceManager.getDefaultSharedPreferences(this).all preferences.forEach { Log.d("Preferences", "${it.key} -> ${it.value}") }
Java
var preferences = PreferenceManager.getDefaultSharedPreferences(context).getAll(); preferences.forEach((key, value) ->{ Log.d("Preferences", String.format("%s -> %s", key, value)); });
L'extrait de code précédent obtient une instance de l'SharedPreferences
par défaut pour l'application, accède à toutes les valeurs stockées, les parcourt en boucle et les imprime dans Logcat.