usuario studio multiple interfaz con activities android navigation-drawer

android - studio - Toca en cualquier lugar para deslizar el menú abierto para el cajón de navegación



navigation drawer material design (5)

Como han dicho otros, y Cheney ha dicho en su respuesta, probablemente es mejor dejarlo como está previsto. Sin embargo, DrawerLayout es un estilo diferente al SlidingMenu . Google también agregó SlidingPaneLayout que coincide más con el estilo de SlidingMenu.

Terminé implementando un SlidingPaneLayout de esta manera, ya que era más de lo que estaba buscando después de todo. (Este es también el estilo de la aplicación YouTube / Hangouts)

<android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/sliding_pane_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/left_pane" android:layout_width="match_parent" android:layout_height="match_parent"/> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1"/> </android.support.v4.widget.SlidingPaneLayout>

Luego para abrir con el botón de inicio de la barra de acción:

getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action buttons switch(item.getItemId()) { case android.R.id.home: if (mPaneLayout.isOpen()) mPaneLayout.closePane(); else mPaneLayout.openPane(); return true; default: return super.onOptionsItemSelected(item); } }

Luego puede implementar un PanelSlideListener para manejar cuando se desliza / abre / cierra.

Sugiero leer también la serie de Adam Powell en el cajón de navegación - la parte 3 se pone en uso del SlidingPaneLayout vs Navigation Drawer:

Parte 1: https://plus.google.com/+AdamWPowell/posts/2zi4DXd3jkm

Parte 2: https://plus.google.com/+AdamWPowell/posts/VdgexsZeXHW

Parte 3: https://plus.google.com/+AdamWPowell/posts/8j2GVw72i1E

Parte 4: https://plus.google.com/+AdamWPowell/posts/TtBFUXhe5HU

Para el menú deslizante de jfeinstein10 ( https://github.com/jfeinstein10/SlidingMenu ), puedo deslizar cualquier parte de la aplicación para abrir el menú.

Para Google, el nuevo cajón de navegación http://developer.android.com/design/patterns/navigation-drawer.html#side-nav , ¿hay alguna forma de que pueda tener un comportamiento similar?

Hasta ahora, desde la documentación, vi que solo se limitaba a deslizarse desde el borde o al tocar el ícono de la aplicación.

El usuario puede llevar el cajón de navegación a la pantalla deslizando desde el borde izquierdo de la pantalla o tocando el icono de la aplicación en la barra de acción.


Google, por la forma en que redactan su tutorial "Si el usuario toca el borde izquierdo de la pantalla (a 20 dp desde la izquierda)", parece que no quiere esa funcionalidad.

Consulte http://developer.android.com/design/patterns/navigation-drawer.html

"El usuario puede colocar el cajón de navegación en la pantalla al deslizar desde el borde izquierdo de la pantalla o al tocar el icono de la aplicación en la barra de acción".

No dicen ni deslizan desde ninguna parte de la pantalla. Tampoco tienen esa funcionalidad en ninguna de sus aplicaciones (G +, Gmail, etc.), por lo que si quieres esa funcionalidad probablemente deberías escribir tu propia (con gestos) o un tercero (por ejemplo, jfeinstein10).

EDITAR: la aplicación de Youtube te permite deslizarte a cualquier parte, pero la versión que tengo al menos (4.5.17) no parece que esté usando su nueva API.




Puedes usar esto

DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); Field mDragger = mDrawerLayout.getClass().getDeclaredField( "mLeftDragger");//mRightDragger or mLeftDragger based on Drawer Gravity mDragger.setAccessible(true); ViewDragHelper draggerObj = (ViewDragHelper) mDragger .get(mDrawerLayout); Field mEdgeSize = draggerObj.getClass().getDeclaredField( "mEdgeSize"); mEdgeSize.setAccessible(true); int edge = mEdgeSize.getInt(draggerObj); mEdgeSize.setInt(draggerObj, edge * 3);