preferencefragmentcompat - setting layout in android
Preferencias anidadas.xml (4)
¿Es de alguna manera posible incluir un preferences.xml
en otro, como se puede hacer para los diseños con la etiqueta <include />
?
Digamos:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceScreen
android:title="@string/pref_group_title_visual">
<include
preferences_filename="xml/pref_visual"/>
</PreferenceScreen>
...
Aquí la solución es inflar ambos archivos de preferencias desde PreferencesActivity. Por ejemplo:
addPreferencesFromResource(R.xml.options);
addPreferencesFromResource(R.xml.additional_options);
La solución alma muestra obras. Se puede ampliar para que solo muestre preferencias si eres el desarrollador que usa una versión de la aplicación sin firmar;)
addPreferencesFromResource(R.xml.options);
addPreferencesFromResource(R.xml.additional_options);
if (BuildConfig.DEBUG) {
addPreferencesFromResource(R.xml.developer_options);
}
Creé una publicación de blog sobre este tema y tengo un ejemplo completo de código de trabajo disponible para descargar. http://androidfu.blogspot.com/2012/05/developer-debug-with-nested-preferences.html
No, parece ser imposible. Pero hay una solución simple. Puede hacer otra PreferenceActivity
que carga PreferenceScreen
anidada. Y en el archivo principal preference.xml, necesita crear un objeto Preference
y establecer un objeto Intent
para él en el código (usando el método setIntent()
). Esta Intent
debe usarse para crear la segunda actividad de PreferenceActivity
.
Para lograr realmente el efecto de anidamiento, puede utilizar esta técnica para reubicar las preferencias cargadas a un grupo ya cargado.
PreferenceCategory notifications = (PreferenceCategory) getPreferenceScreen ().findPreference (PreferenceKey.pref_notifications.name ());
addPreferencesFromResource (R.xml.pref_notifications, notifications);
Donde el addPreferencesFromResource mejorado se define como:
private void addPreferencesFromResource (int id, PreferenceGroup newParent) {
PreferenceScreen screen = getPreferenceScreen ();
int last = screen.getPreferenceCount ();
addPreferencesFromResource (id);
while (screen.getPreferenceCount () > last) {
Preference p = screen.getPreference (last);
screen.removePreference (p); // decreases the preference count
newParent.addPreference (p);
}
}
Funciona para cualquier grupo de preferencias como PreferenceScreen y PreferenceCategory.