Botón "cerrar" de material en la barra de herramientas en lugar de Atrás

81

He visto en la aplicación Inbox de Google, redactando un nuevo correo electrónico, en la barra de herramientas en lugar del botón de retroceso (una flecha) tiene un botón de "cerrar" (ver imagen).

¿Cómo puedo conseguir esto?

bandeja de entrada redactar botón cerrar

Marta Rodríguez
fuente

Respuestas:

108

Utilizar  

this.getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_action_close);

 

lograr esto.

Puede crear su propio icono de cierre u obtenerlo desde el icono de material design establecido en GitHub. Además, agregue esta línea antes de la línea anterior para que el cierre funcione como la flecha hacia atrás.

this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Alok Nair
fuente
No funciona. No reemplaza la flecha hacia atrás con el nuevo ícono, aparecen ambos. Además, con esta solución, el icono no obtiene la propiedad "colorPrimaryDark".
Marta Rodríguez
Funciona, pero no es exactamente lo que quería. Esperaba trabajar como lo hace el icono de retroceso, con "colorPrimaryDark". Pero parece que el icono "cerrar" no forma parte del SDK. ¡Gracias @AlokNair!
Marta Rodríguez
1
Funciona bien cuando se usa ActionBarActivity y PARENT se especifica en el manifiesto. +1 por la respuesta. ¡Gracias amigo!
PsyGik
7
Descubrí que tenía que llamar a setDisplayHomeAsUpEnabled antes de SetHomeAsUpIndicator, de lo contrario, el icono no se reemplazaría.
CodeChimp
1
¿y cómo volver al original?
Michel Feinstein
22

Necesita definir un padre en el manifiesto, luego anular onSupportNavigationUp () si usa la barra de la aplicación de soporte, por supuesto. Además, vaya a este sitio útil para los paquetes de iconos: https://www.google.com/design/icons/

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.yourAwesomeLayout);

    setupToolBar();    
}

private void setupToolBar() {
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    if (toolbar == null) return;

    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
}

@Override
public boolean onSupportNavigateUp() {
    finish(); // close this activity as oppose to navigating up

    return false;
}

ingrese la descripción de la imagen aquí

trabajó
fuente
3
¿Alguna razón por la que devolvió falso onSupportNavigateUp()? La documentación dice que es solo una bandera de éxito
brainmurphy1
7

lo siento por la respuesta tardía. Encontré la solución más fácil para ti . aquí sobre todo la respuesta no me funciona ( because i want to use toolbar not actionBar due to theming). así que intente agregar el botón de cierre a través del diseño xml. y funciona.

aquí hay una sintaxis xml para agregar un botón de cierre a la barra de herramientas (v7).

app:navigationIcon="@drawable/ic_close_black_24dp"

ans aquí hay una imagen de salida imagen de salida

Tecnología Rk215
fuente
De donde @drawable/ic_close_black_24dpviene
CACuzcatlan
@CACuzcatlan Esa es solo una imagen aleatoria que tiene en la carpeta de sus dibujables. Puede elegir cualquier icono.
Mikkel Larsen
@CACuzcatlan lo puede encontrar en los activos vectoriales de Android Studio.
Sourav Bagchi
5
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Search");
toolbar.setNavigationIcon(R.drawable.abc_ic_clear_mtrl_alpha);
setSupportActionBar(toolbar);
krishnan
fuente
3

Una alternativa para definir la actividad principal en el manifiesto es manejar qué acción tomar en el método onOptionsItemSelected como en este ejemplo:

 @Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()) {
        // Respond to the action bar's Up/Home/back button
        case android.R.id.home:
            finish();
            break;
    }
    return super.onOptionsItemSelected(item);
}
34m0
fuente
-5

Puedes definir un estilo:

<style name="Theme.Toolbar.Clear">
    <item name="toolbarNavigationIcon">@drawable/abc_ic_clear_mtrl_alpha</item>
</style>

y utilícelo en su tema:

<style name="Theme.Clear">
    <item name="toolbarTheme">@style/Theme.Toolbar.Clear</item>
</style>
fabiozo
fuente