studio programacion herramientas fundamentos con avanzado aplicaciones android navigation-drawer

programacion - manual de android en pdf



Android: ¿Es posible el Cajón de navegación desde el lado derecho? (8)

http://developer.android.com/training/implementing-navigation/nav-drawer.html

De acuerdo con este documento, no dice si es posible implementar el cajón desde el lado derecho. ¿Es posible? :(


Aquí está la documentación en el cajón y parece que puede configurarlo para que se abra desde la izquierda o la derecha.

La colocación y el diseño del cajón se controlan mediante el atributo android: layout_gravity en las vistas secundarias correspondientes a qué lado de la vista desea que aparezca el cajón: a la izquierda o a la derecha. (O inicio / final en las versiones de plataforma que admiten la dirección de diseño).

http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html


El NavigationDrawer se puede configurar para que se abra desde la izquierda, la derecha o ambas cosas. La clave es el orden de aparición de los cajones en la declaración XML y el atributo layout_gravity. Aquí hay un ejemplo:

<android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" android:baselineAligned="false" > </FrameLayout> <!-- Left drawer --> <ListView android:id="@+id/left_drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="left" android:choiceMode="singleChoice" /> <!-- Right drawer --> <ListView android:id="@+id/right_drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="right" android:choiceMode="singleChoice" /> </android.support.v4.widget.DrawerLayout>


Entonces usa estos códigos @amal, creo que esto te ayudará. XML:

<!-- Framelayout to display Fragments --> <FrameLayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="48dp" android:background="@drawable/counter_bg" > <ImageView android:id="@+id/iconl" android:layout_width="25dp" android:layout_height="wrap_content" android:layout_gravity="left" android:layout_marginLeft="12dp" android:layout_marginRight="12dp" android:src="@drawable/ic_launcher" /> <ImageView android:id="@+id/iconr" android:layout_width="25dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="17dp" android:src="@drawable/ic_launcher" /> </RelativeLayout> </FrameLayout> <!-- Listview to display slider menu --> <ListView android:id="@+id/list_slidermenu" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="@color/list_background" android:choiceMode="singleChoice" android:divider="@color/list_divider" android:dividerHeight="1dp" android:listSelector="@drawable/list_selector" /> <ListView android:id="@+id/list_slidermenu2" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="end" android:background="@color/list_background" android:choiceMode="singleChoice" android:divider="@color/list_divider" android:dividerHeight="1dp" android:listSelector="@drawable/list_selector" />

// establece las imágenes requeridas

Código de actividad:

ImageView iconl,iconr; private DrawerLayout mDrawerLayout; private ListView mDrawerList,mDrawerList2; ImageView iconl,iconr; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iconl = (ImageView)findViewById(R.id.iconl); iconr = (ImageView)findViewById(R.id.iconr); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerList = (ListView) findViewById(R.id.list_slidermenu); mDrawerList2 = (ListView) findViewById(R.id.list_slidermenu2); mDrawerList.setOnItemClickListener(new SlideMenuClickListener()); mDrawerList2.setOnItemClickListener(new SlideMenuClickListener()); iconl.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mDrawerLayout.openDrawer(Gravity.START); mDrawerLayout.closeDrawer(Gravity.END); } }); iconr.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub mDrawerLayout.openDrawer(Gravity.END); mDrawerLayout.closeDrawer(Gravity.START); } }); } }

y aquí puede configurar su propio adaptador de lista para ambas listas y al hacer clic en el elemento visualizarVista (posición); método donde puedes agregar tu fragmento a framelayout.

/** * Diplaying fragment view for selected nav drawer list item * */ private void displayView(int position) { // update the main content by replacing fragments Fragment fragment = null; switch (position) { case 0: fragment = new HomeFragment(); break; default: break; } if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, fragment).commit(); // update selected item and title, then close the drawer mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); mDrawerLayout.closeDrawer(mDrawerList); } else { // error in creating fragment Log.e("MainActivity", "Error in creating fragment"); } }


Para agregar a https://.com/a/21781710/437039 solución.

Si está utilizando un proyecto de Cajón de navegación creado por Android Studio, las cosas cambiarán en onOptionsItemSelected . Desde que crearon la clase para niños, debes usar este código

if (item != null && id == android.R.id.home) { if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) { mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT); } else { mNavigationDrawerFragment.openDrawer(Gravity.RIGHT); } return true; }

Siguiente. En la clase NavigationDrawerFragment , debes crear 3 métodos:

Método 1

public boolean isDrawerOpen(int gravity) { return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(gravity); }

Método 2

public void closeDrawer(int gravity) { mDrawerLayout.closeDrawer(gravity); }

Método 3

public void openDrawer(int gravity) { mDrawerLayout.openDrawer(gravity); }

Solo ahora, el cajón del lado derecho funcionará.


Para establecer el cajón de navegación desde la derecha de la pantalla, convierta el diseño del cajón en el principal de la vista de navegación y configure la gravedad del diseño de la vista de navegación a la derecha.


Puede usar NavigationView desde el diseño del material. Por ejemplo:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="end" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> </android.support.v4.widget.DrawerLayout>

Para obtener un tutorial completo, consulte http://v4all123.blogspot.in/2016/03/simple-example-of-navigation-view-on.html


Sé que esta es una vieja pregunta, pero para aquellos que todavía están buscando la respuesta:

Sí, es posible. Por favor revisa mi respuesta en el siguiente enlace:

https://.com/a/19358114/1572408


Mi aplicación se bloqueó con el error "No se encontró la vista del cajón con gravedad IZQUIERDA".

Así que agregué esto al onOptionsItemSelected:

if (item != null && item.getItemId() == android.R.id.home) { if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) { mDrawerLayout.closeDrawer(Gravity.RIGHT); } else { mDrawerLayout.openDrawer(Gravity.RIGHT); } }