Organizzare le impostazioni Parte di Android Jetpack.
Schermate di impostazioni grandi e complesse possono rendere difficile per l'utente trovare l'impostazione specifica da modificare. La libreria Preference offre i seguenti modi per organizzare meglio le schermate delle impostazioni.
Categorie di preferenze
Se hai diversi argomenti
Preference
oggetti in una singola
schermata, puoi raggrupparli utilizzando
PreferenceCategory
. R
PreferenceCategory
visualizza il titolo di una categoria e separa visivamente la
categoria.
Per definire un PreferenceCategory
in XML, racchiudi i tag Preference
con un
PreferenceCategory
, come segue:
<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>
Il risultato sarà simile al seguente:

Suddividi la gerarchia in più schermate
Se hai un numero elevato di Preference
oggetti o categorie distinte,
possono essere visualizzate su schermi separati. Ogni schermata
PreferenceFragmentCompat
con una propria gerarchia separata. Preference
oggetti
nella schermata iniziale può rimandare a schermate secondarie contenenti
preferenze.
La figura 2 mostra una gerarchia semplice che contiene due categorie: Messaggi e Sincronizza.

La Figura 3 mostra lo stesso insieme di preferenze suddivise in più schermate:

Per collegare gli schermi con un Preference
, puoi dichiarare un app:fragment
in XML oppure
puoi utilizzare
Preference.setFragment()
Avvia il nome completo del pacchetto di PreferenceFragmentCompat
quando
viene toccato Preference
, come mostrato nell'esempio seguente:
<Preference
app:fragment="com.example.SyncFragment"
.../>
Quando un utente tocca un Preference
con un Fragment
associato, l'interfaccia
metodo
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
:
. È qui che gestisci la visualizzazione della nuova schermata
lo schermo sia implementato nell'area Activity
circostante.
Una tipica implementazione è simile alla seguente:
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
}
}
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
Dichiarazione di gerarchie nidificate all'interno della stessa risorsa XML utilizzando un
<PreferenceScreen>
non è più supportato. Usa oggetti Fragment
nidificati
.
Usa attività separate
In alternativa, se devi personalizzare notevolmente ogni schermo o vuoi
Activity
esegue le transizioni tra le schermate, puoi utilizzare un oggetto Activity
separato per
ogni PreferenceFragmentCompat
. In questo modo, puoi personalizzare completamente
Activity
e la schermata delle impostazioni corrispondente. Per la maggior parte delle app,
lo ha consigliato: usa Fragments
come descritto in precedenza.
Per ulteriori informazioni sull'avvio di un Activity
da un Preference
, consulta
Azioni di preferenza.