Cómo organizar tus parámetros de configuración Parte de Android Jetpack.
Las pantallas de configuración grandes y complejas pueden dificultar que el usuario encuentre una parámetro de configuración específico que desean cambiar. La biblioteca de Preference ofrece la seguir maneras de organizar mejor tus pantallas de configuración.
Categorías de Preference
Si tienes varios temas relacionados
objetos Preference en un solo
pantalla, puedes agruparlos usando un
PreferenceCategory R
PreferenceCategory muestra un título de categoría y separa visualmente el
categoría.
Para definir un PreferenceCategory en XML, une las etiquetas Preference con un
PreferenceCategory de la siguiente manera:
<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>
El resultado se ve de la siguiente manera:
Cómo dividir una jerarquía en varias pantallas
Si tienes una gran cantidad de objetos Preference o categorías distintas,
puedes mostrarlos en pantallas separadas. Cada pantalla es un
PreferenceFragmentCompat con su propia jerarquía independiente Preference objeto
en la pantalla inicial pueden vincularse a subpantallas que contienen
preferencias.
La Figura 2 muestra una jerarquía simple que contiene dos categorías: Mensajes y Sincronizar.
La Figura 3 muestra el mismo conjunto de preferencias dividido en varias pantallas:
Para vincular pantallas con un Preference, puedes declarar un app:fragment en XML o
puedes usar
Preference.setFragment()
Inicia el nombre completo del paquete de PreferenceFragmentCompat cuando
Se presiona Preference, como se muestra en el siguiente ejemplo:
<Preference app:fragment="com.example.SyncFragment" .../>
Cuando un usuario presiona un objeto Preference con un objeto Fragment asociado, se llama al método de la interfaz PreferenceFragmentCompat.OnPreferenceStartFragmentCallback.onPreferenceStartFragment(). Este método te permite controlar la visualización de la nueva pantalla y dónde
se implementa la pantalla en el objeto Activity circundante.
Una implementación típica será similar a la siguiente:
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
Declara jerarquías anidadas dentro del mismo recurso XML con un elemento anidado
Ya no se admite <PreferenceScreen>. Cómo usar objetos Fragment anidados
en su lugar.
Cómo usar objetos Activity individuales
Como alternativa, si necesitas personalizar mucho cada pantalla, o si quieres transiciones completas de Activity, puedes usar un objeto Activity individual para cada PreferenceFragmentCompat. Al hacer esto, puedes personalizar totalmente cada Activity y su pantalla de configuración correspondiente. Para la mayoría de las apps,
recomendó esto; En su lugar, usa Fragments como se describió anteriormente.
Si quieres obtener más información para iniciar un Activity a partir de un Preference, consulta
Acciones de Preference.