studio how example custom boton bar agregar android android-actionbar

example - show action bar android



cambiar la imagen de la flecha hacia atrĂ¡s en la barra de acciones con appcompat-v7 (3)

Tengo una Actionbar de Actionbar de android.support.v7.widget.Toolbar . Tiene una imagen de hamburguesa con animación para retroceder la flecha, quiero cambiar la flecha hacia atrás de <- a ->. ¿Cómo puedo hacer esto en Android Studio?

Leí en alguna parte para cambiarlo con el método setHomeAsUpIndicator() , pero cambió el botón de hamburguesa y no tiene animación para retroceder la flecha.


Prueba esto:

//Find the action bar for customizations final ActionBar ab = getSupportActionBar(); assert ab != null; //Make the action bar display an up arrow and set its drawable and color ab.setDisplayHomeAsUpEnabled(true); final Drawable upArrow = ResourcesCompat.getDrawable( getResources(), R.drawable.abc_ic_ab_back_mtrl_am_alpha, //this is the <- arrow from android resources. Change this to the thing you want. null); assert upArrow != null; upArrow.setColorFilter( ContextCompat.getColor( getApplicationContext(), R.color.white // change this to the color you want (or remove the setColorFilter call) ), PorterDuff.Mode.SRC_ATOP); ab.setHomeAsUpIndicator(upArrow);


Hay al menos media docena de maneras de hacerlo, pero probablemente la más simple y la más corta es usar la reflexión para tomar el ActionBarDrawerToggle de Drawable , y voltear su dirección.

Este ejemplo envuelve esa funcionalidad en una subclase, y debería funcionar sin importar su configuración de ActionBar / Activity (siempre que la clase original funcionó allí en primer lugar).

public class FlippedDrawerToggle extends ActionBarDrawerToggle { public FlippedDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes) { this(activity, drawerLayout, null, openDrawerContentDescRes, closeDrawerContentDescRes); } public FlippedDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes) { super(activity, drawerLayout, toolbar, openDrawerContentDescRes, closeDrawerContentDescRes); try { Field sliderField = ActionBarDrawerToggle.class.getDeclaredField("mSlider"); sliderField.setAccessible(true); DrawerArrowDrawable arrow = (DrawerArrowDrawable) sliderField.get(this); arrow.setDirection(DrawerArrowDrawable.ARROW_DIRECTION_RIGHT); } catch (NoSuchFieldException | IllegalAccessException e) { // Fail silently } } }

Esto solo cambiará la dirección de la imagen de la palanca. Si realmente desea que toda la Toolbar de Toolbar / Toolbar de Toolbar ActionBar , en su lugar debe cambiar la dirección del diseño en consecuencia.


Agregue esta condición entre mDrawerToggle = new ActionBarDrawerToggle... y mDrawerToggle.syncState(); Me gusta esto :

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); if (getResources().getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) { toolbar.setLayoutDirection(View.LAYOUT_DIRECTION_RTL); } mDrawerToggle.syncState();