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
- ¿Cómo comprobar si el cajón de navegación está abierto?
- Android - ¿Cómo hacer clic en un elemento de un cajón de navegación con Espresso?
- SoftInputMode en fragmentos
- Android Default HomeAsUp en la barra de herramientas personalizada
- ¿Cuál es el propósito de las herramientas: openDrawer = "start" al crear un DrawerLayout (con NavigationView) desde el asistente?
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
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); } }); }
- Cajón de navegación de derecha a izquierda con v7 ActionBarDrawerToggle
- Android Design Navigation Drawer - ¿Cómo agregar un conmutador en el navegador xml?
- ¿Cómo utilizo DrawerLayout para mostrar sobre la Barra de Acción / Barra de herramientas y debajo de la barra de estado?
- Cómo ocultar OptionsMenu en NavigationDrawer utilizando Fragmentos?
- Animación ActionBarDrawerToggle
- Cerrar Gaveta de navegación sin animación
- Android - Cambiar el Botón Atrás del Botón de Navegación de ActionBar
- Android en el cajón cerrado escucha
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(); } }
- 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.
- Qt / QML Android mejor práctica para enviar un intento personalizado (compartir URL)
- ¿Cómo puedo probar la unidad RecyclerView, LinearLayoutManager en Robolectric?