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.