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

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

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