studio personalizar icono example boton bar atras agregar actionbar android appcompat android-appcompat android-toolbar

android - personalizar - "Botón de retroceso" usando getSupportActionbar y appcompat v7 toolbar



toolbar android example (8)

1- Crear diseño de Toolbar ;

<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:local="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/dark_blue" android:minHeight="?attr/actionBarSize" local:popupTheme="@style/ThemeOverlay.AppCompat.Light" local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

2- Incluya esto en su diseño en el lugar donde desea que esté la toolbar de toolbar .

3- Pega el siguiente código en tu actividad (extiende ActionBarActivity )

private Toolbar mToolbar; //For Toolbar (Action bar) start mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); mToolbar.setNavigationIcon(R.drawable.ic_back_arrow); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); getSupportActionBar().setTitle("Event Details"); //For Toolbar (Action bar) end

4- cambia el ícono de clic de retroceso a lo que quieras

Estoy usando la nueva barra de herramientas de la biblioteca Appcompat V7 y estoy haciendo una aplicación con el cajón de navegación y con fragmentos.

En algunos fragmentos no quiero mostrar el ícono de la hamburguesa sino la flecha en su lugar ... Está bien, hice esto de esta manera:

mDrawerToggle.setDrawerIndicatorEnabled(false); mDrawerToggle.syncState(); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

Mi pregunta es: ¿Cómo o dónde necesito configurar el botón de inicio o lo que necesito para escuchar el botón "Atrás"? Quiero llamar al método principal comprimido y volver a configurar el icono del cajón de navegación con el icono de hamburguesa.


Agregar setDisplayHomeAsUpEnabled (verdadero)

Toolbar toolbar = findViewById(R.id.toolbar); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { actionBar.setDisplayHomeAsUpEnabled(true); }

Maneja el botón de retroceso

public boolean onSupportNavigateUp() { onBackPressed(); return true; }


Agregue este método en onCreate() :

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Luego anule onOptionItemSelected() como se muestra a continuación:

@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; default: return super.onOptionsItemSelected(item); } }


No estoy seguro de si esto funciona en el caso de OP, pero en muchos casos esta es probablemente la opción más simple para implementar el botón Atrás con la barra de herramientas de AppCompat.

Omita todos los elementos setHomeButtonEnabled , setDisplayHomeAsUpEnabled y onOptionsItemSelected , y problemas relacionados .

En cambio, al inicializar la barra de herramientas, simplemente configure 1) icono de navegación y 2) navegación OnClickListener para ello:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); if (enableBackNavigation) { toolbar.setNavigationIcon(R.drawable.ic_back); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); }


Puedes hacerlo así:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); toolbar = (Toolbar)findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } setUpNavigationDrawer(); getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager }

Defina el onBackSTackChangedListener:

private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() { @Override public void onBackStackChanged() { setNavIcon(); }; }

Establezca el icono de acuerdo con la pila de su fragmento:

protected void setNavIcon() { int backStackEntryCount = getFragmentManager().getBackStackEntryCount(); drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0); }

Detectar cuando se presiona el icono del cajón:

public boolean onOptionsItemSelected(MenuItem item) { if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case x: return true; default: return false; } }

Y maneja el botón arriba:

public boolean onSupportNavigateUp() { onBackPressed(); return true; }

Esto funciona para mi. Buena suerte.


Simplemente puede configurar el icono de navegación y asegurarse de que está configurando setNavigationOnClickListener() después de configurar setSupportActionBar(toolbar)

toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } });


activa el botón de retroceso:

getActionBar().setDisplayHomeAsUpEnabled(enable);

y escuche los clics en onBackPressed()

Obviamente su actividad debe extender ActionBarActivity


en manifiesto, agregue estas líneas debajo de la actividad en la que desea que funcione la flecha hacia atrás

android: parentActivityName = "Su nombre de actividad principal"