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); } }); } 

5 Solutions collect form web for “El cajón de navegación en android no está en pantalla completa”

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.

  • Android DrawerLayout.setDrawerLockMode () no funciona
  • Cómo abrir el cajón de navegación en el botón de clic en el fragmento principal?
  • Android: 2 o más ExpandableListView dentro del Gaveta de navegación
  • La mejor manera de implementar un cajón de desplazamiento de navegación
  • Android lollipop toolbar conmutador entre abrir / cerrar el cajón y el botón Atrás
  • Cajón de navegación - Desactivar clic en los elementos detrás del cajón
  • Cómo configurar un observador para actualizar el cajón de navegación después de que el método onActivityResult recibió un resultado de intención
  • Actualizar el estado seleccionado del cajón de navegación después de volver a pulsar
  • Barra de herramientas y NavigationDrawer
  • ¿Cómo agregar un título en el diseño del cajón de navegación?
  • ¿Cómo puedo cambiar el tamaño de texto del elemento NavigationView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.