Organiser vos paramètres Inclus dans Android Jetpack.
Les écrans de paramètres grands et complexes peuvent rendre difficile pour un utilisateur de trouver le paramètre spécifique qu’ils souhaitent modifier. La bibliothèque "Preference" propose suivantes pour mieux organiser vos écrans de paramètres.
Catégories de préférences
Si vous avez plusieurs
Preference
sur un seul objet
vous pouvez les regrouper à l'aide d'un
PreferenceCategory
A
PreferenceCategory
affiche un titre de catégorie et sépare visuellement les
catégorie.
Pour définir une PreferenceCategory
en XML, encapsulez les balises Preference
avec une
PreferenceCategory
, comme suit:
<PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto"> <PreferenceCategory app:key="notifications_category" app:title="Notifications"> <SwitchPreferenceCompat app:key="notifications" app:title="Enable message notifications"/> </PreferenceCategory> <PreferenceCategory app:key="help_category" app:title="Help"> <Preference app:key="feedback" app:summary="Report technical issues or suggest new features" app:title="Send feedback"/> </PreferenceCategory> </PreferenceScreen>
Le résultat ressemble à ceci:
![Image montrant les préférences avec des catégories](https://developer.android.com/static/develop/ui/views/components/settings/images/settings-preferencecategory.png?authuser=9&hl=fr)
Diviser votre hiérarchie en plusieurs écrans
Si vous avez un grand nombre d'objets Preference
ou de catégories distinctes, vous
vous pouvez les afficher
sur des écrans distincts. Chaque écran est un
PreferenceFragmentCompat
avec sa propre hiérarchie distincte. Preference
objet
sur votre écran initial peuvent ensuite être
liés à des sous-écrans qui contiennent des
préférences.
La figure 2 présente une hiérarchie simple qui contient deux catégories: Messages et Synchronisation :
![Image montrant un écran de préférences avec des hiérarchies](https://developer.android.com/static/develop/ui/views/components/settings/images/settings-simplehierarchy.png?authuser=9&hl=fr)
La figure 3 montre le même ensemble de préférences réparti sur plusieurs écrans:
![Image montrant une hiérarchie divisée en plusieurs écrans](https://developer.android.com/static/develop/ui/views/components/settings/images/settings-screens.png?authuser=9&hl=fr)
Pour associer des écrans avec un Preference
, vous pouvez déclarer un app:fragment
en XML ou
vous pouvez utiliser
Preference.setFragment()
Lancez le nom de package complet de PreferenceFragmentCompat
lorsque
l'utilisateur appuie sur Preference
, comme illustré dans l'exemple suivant:
<Preference app:fragment="com.example.SyncFragment" .../>
Lorsqu'un utilisateur appuie sur une Preference
associée à un Fragment
, l'interface
méthode
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
est appelé. Cette méthode vous permet de gérer l'affichage du nouvel écran
l'écran est implémenté dans l'élément Activity
environnant.
Une implémentation type ressemble à ceci:
Kotlin
class MyActivity : AppCompatActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean { // Instantiate the new Fragment. val args = pref.extras val fragment = supportFragmentManager.fragmentFactory.instantiate( classLoader, pref.fragment) fragment.arguments = args fragment.setTargetFragment(caller, 0) // Replace the existing Fragment with the new Fragment. supportFragmentManager.beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit() return true } }
Java
public class MyActivity extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback { ... @Override public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) { // Instantiate the new Fragment. final Bundle args = pref.getExtras(); final Fragment fragment = getSupportFragmentManager().getFragmentFactory().instantiate( getClassLoader(), pref.getFragment()); fragment.setArguments(args); fragment.setTargetFragment(caller, 0); // Replace the existing Fragment with the new Fragment. getSupportFragmentManager().beginTransaction() .replace(R.id.settings_container, fragment) .addToBackStack(null) .commit(); return true; } }
Écrans des préférences
Déclarer des hiérarchies imbriquées au sein d'une même ressource XML à l'aide d'une propriété
<PreferenceScreen>
n'est plus accepté. Utiliser des objets Fragment
imbriqués
à la place.
Utiliser des activités distinctes
Si vous devez personnaliser davantage chaque écran ou si vous souhaitez
Activity
entre les écrans, vous pouvez utiliser un élément Activity
distinct pour
chaque PreferenceFragmentCompat
. Cela vous permet de personnaliser entièrement chaque
Activity
et l'écran de paramètres correspondant. Pour la plupart des applications, nous ne
a recommandé ceci ; utilisez plutôt Fragments
comme décrit précédemment.
Pour en savoir plus sur le lancement d'un Activity
à partir d'un Preference
, consultez
Actions de préférence :