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

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

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í


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


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

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

-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>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.