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.

¿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.

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 .

  • Android: preferencia de tamaño de fuente para toda la aplicación
  • Cerrar PreferenceFragment
  • Iniciar una actividad desde preferences.xml
  • Cambio de una preferencia 'Resumen
  • Android: inicia una preferencia personalizada desde una preferenciaActividad
  • Fragmento de configuración de Android
  • ¿Cómo obtengo las preferencias para trabajar en Android?
  • Implementar una RadioButtonPreference en Android
  • ¿Cómo puedo crear una preferencia con un EditTextPreference y un Togglebutton?
  • Cómo eliminar PreferenceCategory de forma programática?
  • Mostrar la pantalla de preferencias La primera vez que se ejecuta la aplicación y las preguntas relacionadas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.