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