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:
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.