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