studio preferencefragmentcompat medium example create activity android include nested preferences android-preferences

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.