Cómo insertar DrawerLayout en PreferenceActivity en una aplicación de Android?
Estoy escribiendo una aplicación de Android para aprovechar la funcionalidad Diseño de cajones. Quiero tener la habilidad de usar el Diseño de cajones como una herramienta de navegación disponible en toda la aplicación. Para utilizar el Diseño de cajón, utilizo lo siguiente en los archivos xml de la distribución de actividades:
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The main content view --> <LinearLayout android:id="@+id/main_content_layout" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- The navigation drawer --> <ListView android:id="@+id/navigational_drawer" android:layout_width="220dp" android:layout_height="match_parent" android:layout_gravity="start" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:background="#FFFFFF"/> </android.support.v4.widget.DrawerLayout>
Sin embargo, estoy teniendo un montón de dificultades para envolver DrawerLayout alrededor de la PreferenceActivity. PreferenceActivity es un tipo especial de actividad que me gustaría conservar porque me ayuda a mantener la apariencia de las preferencias de Android en mi aplicación; Dicho esto, usa addPreferencesFromResource () para cargar preferencias y no usa addContentView () para cargar archivos XML; Los recursos de preferencia normalmente contienen etiquetas PreferenceScreen que no les gusta que se envuelvan en DrawerLayouts.
- Preferencias sin métodos obsoletos
- ¿Cuál es la forma más adecuada de almacenar la configuración de usuario en la aplicación de Android?
- Los valores de caché de SharedPreferences tienen sentido?
- Referencia a una cadena en un recurso de matriz de cadena con xml
- La forma más segura de usar SharedPreferences
¿Alguien tuvo que lidiar con ese problema y cómo lo resolvió? Si tienes PreferenceActivity en tu aplicación de Android y tienes DrawerLayout disponible en la misma actividad, comparte cómo lo hiciste. Cualquier ayuda sería muy apreciada.
EDITADO: Si cambio
<!-- The main content view --> <LinearLayout android:id="@+id/main_content_layout" android:layout_width="match_parent" android:layout_height="match_parent" />
a
<ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" />
Entonces la aplicación no se bloquea cuando se carga PreferenceActivity (porque la "lista" de id coincide con lo que espera la actividad de preferencias); Sin embargo, el cajón no se muestra. Es casi como si todo lo que está debajo de ListView "lista" se está ignorando.
- Pantalla de preferencia El diseño personalizado sólo funciona con el segundo clic
- ¿Cómo hacer lo contrario de atributo de preferencia android: dependencia?
- ¿Cómo crear una preferencia personalizada con un botón neutral?
- ¿Cómo hago "subcategorías" en Preferencias
- Cómo borrar las viejas preferencias al actualizar la aplicación de Android?
- No puedo averiguar cómo usar un android PreferenciaActividad
- Hacer que Preferencia parezca deshabilitada, pero sigue registrando clics
- ¿Cómo agregar dinámicamente preferencias en la pantalla de preferencias y enlazar sus valores?
Este me llevó un tiempo, pero pude hacer que esto funcione para mi aplicación. No sé si hace una diferencia, pero estoy usando HoloEverywhere
, así que sólo asumo que esto trabajará en el estándar PreferenceActivity
también.
En mi PreferenceActivity
cuando overrode todas las versiones de setContentView()
para cargar mi DrawerLayout
personalizado que es como el suyo y tiene un ListView
con la identificación android estándar de la list
. En el último método me aseguré de llamar a onContentChanged()
después de que llamé super.setContentView()
:
@Override public void setContentView(int layoutResID) { setContentView( getLayoutInflater().inflate( layoutResID ) ); } @Override public void setContentView(View view) { setContentView( view, new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT ) ); } @Override public void setContentView(View view, LayoutParams params) { // inflate the drawer layout super.setContentView( R.layout.navigation_drawer_base_layout ); DrawerLayout dl = findViewById(R.id.drawer_layout); // do stuff here initialize the DrawerLayout like add a DrawerToggle, etc ...STUFF // Call onContentsChanged() to let the Activity know it needs to refresh itself. onContentChanged(); }
En onBuildHeaders()
Todavía llamo loadHeadersFromResource()
para crear todos los Header
para mi diferente PreferenceScreen
.
- ERR_ADDRESS_UNREACHABLE para abrir mi localhost en Chrome Android
- Comprensión del uso de ImageView Matrix