El cajón de navegación en android no está en pantalla completa

Desde que el google ha introducido el cajón de la navegación, intenté utilizar este componente para crear un facebook-como el menú. El problema es que el efecto visual parece ser diferente.

El google tiene la barra de acción de retener cuando el cajón está abierto, mientras que el facebook uno no. En lugar, toda la pantalla ha empujado a la derecha

He encontrado hay algunos lib puede lograr esto, pero ya que prefiero no incluir terceros lib en el proyecto, hay alguna manera de lograr esto? Gracias

Google:

Facebook:

Código basado en el tutorial de los cursores de navegación

protected void setupMenu(List<String> list, final ListView menu) { Adapter customAdapter = new Adapter(getActionBar().getThemedContext(), R.layout.item, list); menu.setAdapter(customAdapter); menu.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, final int pos, long id) { String selected = ((TextView) view.findViewById(R.id.itemTxt)) .getText().toString(); // define pass data final Bundle bData = new Bundle(); bData.putString("itemSelect", selected); drawer.setDrawerListener(new DrawerLayout.SimpleDrawerListener() { @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); FragmentTransaction tx = getSupportFragmentManager() .beginTransaction(); tx.replace(R.id.mainContent, Fragment.instantiate( MainActivity.this, "com.example.utilities.ContentPage", bData)); tx.commit(); } }); drawer.closeDrawer(menu); } }); } 

Bien crear un cajón de navegación personalizado es la mejor solución para usted. Entiendo que no desea utilizar a terceros, pero esto puede ser una solución rápida a su problema.

Si va a comprobar el código fuente de DrawerLayout, verá, que resposnible para este margen mínimo es la variable mMinDrawerMargin

Por lo tanto, hay al menos 2 soluciones (trucos) 1. extender DrawerLayout y establecer esta variable a 0 con la reflexión. Llame a este método de todos los constructores.

 private void init() { try { Field declaredField = getClass().getSuperclass().getDeclaredField("mMinDrawerMargin"); declaredField.setAccessible(true); declaredField.setInt(declaredField, 0); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } 
  1. No es tan difícil

Overryde onMeasure método como este

 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // taken from parents logic float density = this.getResources().getDisplayMetrics().density; int minMargin = (int) (64.0F * density + 0.5F); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int newWidth = MeasureSpec.makeMeasureSpec(widthSize + minMargin, widthMode); super.onMeasure(newWidth, heightMeasureSpec); } 

También he creado proyecto de ejemplo aquí https://bitbucket.org/wnc_21/fsnavigationdrawer

Aquí está una solución rápida que trabajó para mí:

 <include android:id="@+id/left_drawer" android:orientation="vertical" **android:layout_width="320dp"** android:layout_height="match_parent" android:layout_gravity="start" layout="@layout/drawer"/> 

Establece el ancho del diseño incluido. Para dispositivos con diferentes tamaños de pantalla, puede establecer dinámicamente el ancho de este diseño incluido.

Todo lo mejor !!!!

Este problema es causado por el margen por lo que tenemos que restablecer el ancho: i resuelto este problema mediante la implementación de DrawerListener y envolver ListView dentro de un LinearLayout para hacer salas para otras vistas al lado de la vista de lista

Aquí está mi oyente

 public class NavigationDrawer implements DrawerLayout.DrawerListener { private DrawerLayout mDrawerLayout; protected boolean expanded = false; NavigationDrawer(Activity activity) { this.activity = activity; } public NavigationDrawer bindDrawerLayout(int id) { mDrawerLayout = (DrawerLayout) activity.findViewById(id); mDrawerLayout.setDrawerListener(this); return this; } @Override public void onDrawerSlide(View drawerView, float slideOffset) { if (!expanded) { Log.i("margin", "here we are"); LinearLayout layout = (LinearLayout) findViewById(R.id.left_drawer); layout.getLayoutParams().width = getResources().getDisplayMetrics().widthPixels; layout.requestLayout(); expanded = true; } } @Override public void onDrawerOpened(View drawerView) { } @Override public void onDrawerClosed(View drawerView) { } @Override public void onDrawerStateChanged(int newState) { } } 

Aquí está mi diseño:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/application_drawer_layout" android:layout_width="fill_parent" android:layout_height="match_parent" android:background="#ffffff"> <FrameLayout android:id="@+id/application_content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/left_drawer" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="start" android:background="#000000" android:orientation="vertical"> <ListView android:id="@+id/application_left_drawer" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_gravity="start" android:background="#111" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" /> </LinearLayout> </android.support.v4.widget.DrawerLayout> 

Si desea implementar como el menú deslizante de Facebook, a continuación, para utilizar androides SlidingPaneLayout en lugar de NavigationDrawer.

 <android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="250dp" android:layout_height="match_parent" android:background="#CC00FF00" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="match_parent" android:background="#CC0000FF" > // add toolbar and other required layouts </LinearLayout> </android.support.v4.widget.SlidingPaneLayout> 

Agregar barra de herramientas en lugar de barra de acciones y no aplicar ningún tema barra de acción.

  • Hacer fragmento que se puede hacer clic al abrir el cajón de navegación
  • Cajón de navegación con la actividad y el niño Fragmentos
  • El título de CollapsingToolbarLayout desaparece
  • Cajón de navegación con cabeceras / secciones
  • No se puede agregar pestañas dentro de Fragmento de cajón de navegación Android
  • Cómo cambiar la fuente de navegación Encabezado de cajón y ScrollingActivity?
  • Dinámico añadiendo elemento a NavigationView en Android
  • ¿Cómo reemplazar el icono de la hamburguesa utilizado para ActionBarToggle en la barra de herramientas de Android con una costumbre drawable?
  • Cómo agregar barra de acción personalizada con el cajón de navegación?
  • Android: Cajón de navegación en múltiples actividades
  • ¿Ha cambiado el título en el cambio de orientación?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.