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:
![Un'immagine che mostra preferenze con categorie](https://developer.android.google.cn/static/develop/ui/views/components/settings/images/settings-preferencecategory.png?authuser=9&hl=it)
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.
![Un'immagine che mostra una schermata di preferenze con gerarchie](https://developer.android.google.cn/static/develop/ui/views/components/settings/images/settings-simplehierarchy.png?authuser=9&hl=it)
La Figura 3 mostra lo stesso insieme di preferenze suddivise in più schermate:
![Un'immagine che mostra una gerarchia divisa in più schermate](https://developer.android.google.cn/static/develop/ui/views/components/settings/images/settings-screens.png?authuser=9&hl=it)
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:
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
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.