Agregar propiedades de navegación en el botón ActionBar personalizado en Android

Quiero crear mi propio Layout de ActionBar .

Así (creado en Paint por ejemplo)

Introduzca aquí la descripción de la imagen

¿Es posible dar al segundo botón las propiedades de navegación hacia arriba? Así que si lo presiono, termina esta Activity y comienza su padre.

Quiero tener el icono de la hamburguesa para el Navigation Drawer , el ícono arriba para la navegación hacia arriba y el título de la actividad.

¿Es posible? ¿O hay una solución ya?

En realidad, es bastante fácil (aunque es poco hacky) que hacer. En primer lugar, crear un dibujable para el botón de vuelta (preferiblemente – como un selector, para distinguir estado presionado / normal:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/back_button_pressed"/> <item android:drawable="@drawable/back_button"/> </selector> 

A continuación, establezca esto dibujable en el logo de la barra de herramientas toolbar.setLogo(R.drawable.back_button_selector);

Entonces lo único que queda es establecer click-listener.

 View logoView = getToolbarLogoIcon(toolbar); logoView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); ... private View getToolbarLogoIcon(Toolbar toolbar){ //check if contentDescription previously was set boolean hadContentDescription = android.text.TextUtils.isEmpty(toolbar.getLogoDescription()); String contentDescription = String.valueOf(!hadContentDescription ? toolbar.getLogoDescription() : "logoContentDescription"); toolbar.setLogoDescription(contentDescription); ArrayList<View> potentialViews = new ArrayList<>(); //find the view based on it's content description, set programatically or with android:contentDescription toolbar.findViewsWithText(potentialViews,contentDescription, View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); //Nav icon is always instantiated at this point because calling setLogoDescription ensures its existence View logoIcon = null; if (potentialViews.size() > 0) { logoIcon = potentialViews.get(0); } //Clear content description if not previously present if (hadContentDescription) { toolbar.setLogoDescription(null); } return logoIcon; } 

(Gracias mensaje de Nicola aquí ). O si no tienes miedo de la reflexión, se puede hacer fácilmente como esto:

  try { Field declaredField = toolbar.getClass().getDeclaredField("mLogoView"); declaredField.setAccessible(true); View logoView = (View) declaredField.get(toolbar); logoView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); } catch (Exception ex) { //error } 

Otra posible solución sería configurar el diseño personalizado en ActionBar. Sin embargo, estoy abogando por seguir las directrices de UI / UX y comprobar, si el cajón de navegación es esencial en la actividad secundaria.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.