Organizza le impostazioni Componente di Android Jetpack.
Schermate di impostazioni grandi e complesse possono rendere difficile per un utente trovare un'impostazione specifica da modificare. La libreria Preferenze offre i seguenti modi per organizzare meglio le schermate delle impostazioni.
Categorie di preferenza
Se hai diversi oggetti Preference
correlati su una singola schermata, puoi raggrupparli utilizzando un PreferenceCategory
. Un elemento PreferenceCategory
mostra il titolo di una categoria e separa visivamente la categoria.
Per definire un PreferenceCategory
in XML, aggrega 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, puoi
visualizzarli in schermate separate. Ogni schermata è una PreferenceFragmentCompat
con una propria gerarchia separata. Preference
oggetti nella schermata iniziale possono quindi collegarsi a schermate secondarie contenenti le preferenze correlate.
La Figura 2 mostra una gerarchia semplice che contiene due categorie: Messaggi e Sincronizzazione.
La figura 3 mostra lo stesso insieme di preferenze suddiviso in più schermate:
Per collegare le schermate con un Preference
, puoi dichiarare un app:fragment
in XML o
puoi utilizzare
Preference.setFragment()
.
Avvia il nome completo del pacchetto 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, viene richiamato il metodo di interfaccia PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment()
. In questo metodo puoi gestire la visualizzazione della nuova schermata e implementare la schermata nell'ambiente 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; } }
Schermate preferenze
La dichiarazione di gerarchie nidificate all'interno della stessa risorsa XML mediante un elemento <PreferenceScreen>
nidificato non è più supportata. Utilizza invece oggetti Fragment
nidificati.
Usa attività separate
In alternativa, se devi personalizzare in modo significativo ogni schermata o se vuoi eseguire transizioni
Activity
complete tra le schermate, puoi utilizzare un Activity
separato per
ogni PreferenceFragmentCompat
. In questo modo puoi personalizzare completamente ogni Activity
e la schermata delle impostazioni corrispondente. Questa opzione non è consigliata per la maggior parte delle app; utilizza invece Fragments
come descritto in precedenza.
Per ulteriori informazioni sull'avvio di un Activity
da una Preference
, consulta
Azioni relative alle preferenze.