Organiser vos paramètres Fait partie d'Android Jetpack.
Les écrans de paramètres volumineux et complexes peuvent empêcher les utilisateurs de trouver un paramètre spécifique qu'ils souhaitent modifier. La bibliothèque des préférences propose les méthodes suivantes pour mieux organiser vos écrans de paramètres.
Catégories de préférences
Si vous avez plusieurs objets Preference
associés sur un même écran, vous pouvez les regrouper à l'aide d'un PreferenceCategory
. Un élément PreferenceCategory
affiche un titre de catégorie et sépare visuellement la catégorie.
Pour définir un élément PreferenceCategory
en XML, encapsulez les balises Preference
avec un élément 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 des préférences avec des catégories](https://developer.android.com/static/develop/ui/views/components/settings/images/settings-preferencecategory.png?authuser=8&hl=fr)
Diviser votre hiérarchie en plusieurs écrans
Si vous avez un grand nombre d'objets Preference
ou de catégories distinctes, vous pouvez les afficher sur des écrans distincts. Chaque écran est un PreferenceFragmentCompat
avec sa propre hiérarchie distincte. Les objets Preference
sur votre écran initial peuvent ensuite être associés à des sous-écrans contenant des préférences associées.
La figure 2 illustre une hiérarchie simple contenant deux catégories: Messages et Sync (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=8&hl=fr)
La figure 3 illustre le même ensemble de préférences divisé en 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=8&hl=fr)
Pour associer des écrans avec un Preference
, vous pouvez déclarer un app:fragment
en XML ou 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 un Preference
auquel un Fragment
est associé, la méthode d'interface PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
est appelée. Cette méthode vous permet d'afficher le nouvel écran et d'implémenter l'écran dans le Activity
environnant.
Une implémentation type se présente comme suit:
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; } }
PreferenceScreens
Il n'est plus possible de déclarer des hiérarchies imbriquées au sein d'une même ressource XML à l'aide d'un élément <PreferenceScreen>
imbriqué. Utilisez plutôt des objets Fragment
imbriqués.
Utiliser des activités distinctes
Si vous devez personnaliser fortement chaque écran ou si vous souhaitez des transitions Activity
complètes entre les écrans, vous pouvez utiliser un élément Activity
distinct pour chaque élément PreferenceFragmentCompat
. Cela vous permet de personnaliser entièrement chaque Activity
et l'écran de paramètres correspondant. Pour la plupart des applications, nous vous déconseillons d'effectuer cette opération. Utilisez Fragments
comme décrit précédemment.
Pour en savoir plus sur le lancement d'un Activity
à partir d'un Preference
, consultez la section Actions des préférences.