Icono y Up link en el Action Bar

En esta entrada vamos a ver cómo poner un icono de Aplicación y colocarlo también en el Action Bar. Además habilitaremos la navegación a una Activity declarada como padre desde el Action Bar.

Si nuestra Activity está declarada como AppCompatActivity (public class MainActivity extends AppCompatActivity) y tenemos un tema que implementa la Action Bar, podremos añadir un enlace a la página padre de nuestra Activity y un icono de la aplicación.

En la imagen vemos ambas cosas, la flecha llevará a la Activity que hemos declarado como padre de la nuestra en el Manifest. El icono lo hemos creado a partir de un .png utilizando la herramienta Configure Image Assest.

Buscamos un icono en formato .png que nos guste para nuestra aplicación. Para añadirlo como assest en /res/mimap abrimos la herramienta con New->Image Asset. Seleccionamos el tipo de icono como Launcher Icon (Legacy only), el tipo de imagen como Image, seleccionamos nuestro icono .png, le asignamos nombre siguiendo la convención ic_***** y configuramos como queramos. La herramienta crea un recurso de tipo mipmap creando un icono diferente para cada tamaño.

Ahora tenemos que indicar en el Manifest que éste será el icono de nuestra aplicación. Añadimos dentro del Tag <application> lo siguiente:

android:icon="@mipmap/ic_myicon"

Con esto tenemos el icono de la aplicación para el lanzador de aplicaciones en el dispositivo al instalar la apk.

Ahora vamos a añadir el icono en la barra de acciones superior.

Si heredamos de AppCompatActivity podremos instanciar un objeto  ActionBar en nuestro onCreate. Utilizando el método getSupportActionBar() instanciamos el objeto ActionBar de nuestra aplicación. Le añadimos un icono con setIcon utilizando el recurso mipmap creado y permitimos que se muestre con setDisplayShowHomeEnabled(true). Con esto se muestra el icono.

//Obtenemos la ActionBar instalada por AppCompatActivity
ActionBar actionBar = getSupportActionBar();

//Establecemos el icono en la ActionBar
actionBar.setIcon(R.mipmap.ic_launcher);
actionBar.setDisplayShowHomeEnabled(true);

// Activar flecha ir atrás (ir a la Parent Activity declarada en el manifest)
actionBar.setDisplayHomeAsUpEnabled(true);

Para mostrar la flecha de vuelta a la Parent Activity tenemos que añadirla con setDisplayHomeAsUpEnabled(true). Pero para que tenga funcionalidad, es decir que al hacer click vaya a la actividad padre, tenemos que modificar el Manifest para indicar cuál es la Activity a la que saltar. Esto pasa de un Activity a la padre sin necesidad de utilizar un intent, pero no podemos enviar datos.

Para versiones superiores a la 4.0 podemos añadir el atributo siguiente en el tag activity hija.

android:parentActivityName="... .MainAcitivty"

En el Manifest añadimos un tag <meta-data> dentro del tag <activity>:

        <!-- Parent activity meta-data to support 4.0 and lower -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />

En el ejemplo vemos que indicamos que el meta-data es PARENT_ACTIVITY  e indicamos su valor, en este caso la activity correspondiente.