android - studio - nova launcher
¿Cómo configurar el ícono de diseño de cajón en el lado derecho de la pantalla del dispositivo? (6)
Aquí hay una solución de vacío que funcionó en mi caso.
toggle = new ActionBarDrawerToggle(
this, drawer, toolbar0, R.string.open_nav, R.string.close_nav);
Hice una barra de herramientas para ello.
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_marginRight="40dp"
android:layout_marginEnd="40dp"
android:background="@color/colorPrimary">
<!-- this is your general toolbar-->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right|end|center_vertical"
android:text="Mytitle"/>
</android.support.v7.widget.Toolbar>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar0"
android:layout_width="40dp"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="right|end"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<!-- this is your nav-button toolbar-->
</FrameLayout>
</android.support.design.widget.AppBarLayout>
y establece onclicklistener para ello:
toolbar0.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (drawer.isDrawerOpen(Gravity.RIGHT)) {
drawer.closeDrawer(Gravity.RIGHT);
} else {
drawer.openDrawer(Gravity.RIGHT);
}
}
});
He creado la aplicación de ejemplo de diseño de cajón, funciona bien, mi problema es que el diseño de cajón funciona de derecha a izquierda perfectamente, pero estoy intentando mover el icono del lado izquierdo al lado derecho, pero no funciona. ¡Dame tu sugerencia ...! Esto es posible o no?
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<!-- The navigation drawer -->
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
De la Guía del desarrollador :
El posicionamiento y la disposición del cajón se controlan mediante el atributo android: layout_gravity en las vistas secundarias correspondientes al lado de la vista desde el que quiere que emerja el cajón: izquierda o derecha. (O iniciar / finalizar en las versiones de plataforma que admiten la dirección de diseño).
Lo que significa, puedes hacer esto por:
<DrawerLayout
android:layout_gravity="right">
</DrawerLayout>
Editar
De acuerdo con Crear un cajón de navegación ,
La vista del cajón (el ListView) debe especificar su gravedad horizontal con el atributo android: layout_gravity. Para admitir idiomas de derecha a izquierda (RTL), especifique el valor con "inicio" en lugar de "izquierda" (de modo que el cajón aparezca a la derecha cuando el diseño sea RTL).
Así que deberías hacer:
<DrawerLayout
android:layout_gravity="start">
</DrawerLayout>
Este icono representa el menú de navegación, que por diseño debe estar en el lado izquierdo de la pantalla. De acuerdo con las pautas, podemos tener un cajón de navegación en el lado derecho, pero eso se usará para modificar el contenido (por ejemplo, los filtros). Para todos estos propósitos, es posible que desee utilizar ActionbarItem y colocar un ActionItem en la esquina derecha de la pantalla. Haga clic en ese elemento de acción para abrir o cerrar el cajón de navegación derecho.
Pero seguro, según el diseño, este ícono de menú animado de tres líneas, que representa la navegación, estará en el lado izquierdo.
Solo para la información, para colocar el cajón de navegación en el lado derecho, debe cambiar la gravedad del cajón de navegación de la siguiente manera:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/main_background" >
<!-- The main content view -->
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<!-- The navigation drawer -->
<LinearLayout
android:id="@+id/right_drawer"
android:layout_width="280dp"
android:layout_gravity="end"
android:layout_height="match_parent"
android:orientation="vertical" />
</android.support.v4.widget.DrawerLayout>
Además, en este caso, realmente desea que el ícono del menú de navegación, a la derecha, use diseños de encabezado personalizados o una biblioteca como ActionBarSherlock para editarlo.
¡Espero que esto ayude!
Si utiliza AppBarLayout y la barra de herramientas, haga lo siguiente.
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
android:layoutDirection="rtl">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
aviso: android: layoutDirection = "rtl"
Tal vez sea demasiado tarde, pero puede resolverlo utilizando el Menú predeterminado.
Crear res/menu/my_right_side_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/btnMyMenu"
android:icon="@drawable/ic_drawer"
android:title="Right Side Menu"
myapp:showAsAction="always"/>
</menu>
Luego agregue su menú en onCreateOptionsMenu()
en su Activity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
int menuToUse = R.menu.my_right_side_menu;
MenuInflater inflater = getMenuInflater();
inflater.inflate(menuToUse, menu);
return super.onCreateOptionsMenu(menu);
}
A continuación, en su ActionBarDrawerToggle
maneje el evento de clic de su elemento de menú
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) {
@Override
public boolean onOptionsItemSelected(android.view.MenuItem item) {
if (item != null && item.getItemId() == R.id.btnMyMenu) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
return true;
}
return false;
}
};
Y, finalmente, no olvides ocultar tu botón de inicio de la ActionBar
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setDisplayShowHomeEnabled(false);
Tienes dos opciones si no quieres tener una barra de herramientas o si no necesitas una barra de herramientas como en mi caso, existe la opción fácil de simplemente agregar un ImageButton en la esquina superior derecha de tu actividad como esta.
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="right" >
<!-- The main content view -->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<FrameLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<ImageButton
android:id="@+id/account_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:padding="15dp"
android:background="@null"
android:src="@drawable/ic_menu_white_24dp" />
</RelativeLayout>
<!-- The navigation drawer -->
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="right"
android:background="#111"
android:choiceMode="singleChoice"
android:divider="@android:color/transparent"
android:dividerHeight="0dp" />
y luego simplemente agregue un detector en él y use drawerLayout.isDrawerOpen () para verificar el estado actual del cajón en una condición normal de if, luego abrir y cerrar el cajón usando drawerLayout.openDrawer ( ) y drawerLayout.closeDrawer (); y para cada uno de los métodos puede pasar si la gravedad o el drawerView en su caso es el ListView, por lo que debería ser algo así como drawer_layout.isDrawerOpen (drawer_list);