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
Figure 1 : Préférences au sein des catégories.

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
Figure 2 : Hiérarchie simple à deux catégories.

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
Figure 3 : Hiérarchie divisée en plusieurs écrans.

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 &lt;PreferenceScreen&gt; 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.