Android: ¿Cómo cambiar el ícono de "Inicio" de ActionBar para que sea diferente al ícono de la aplicación?

114

El icono principal de mi aplicación consta de dos partes en una imagen: un logotipo y algunas letras debajo. Esto funciona bien para el ícono del iniciador de la aplicación, pero cuando el ícono aparece en el borde izquierdo de la barra de acción, las letras se cortan y no se ve bien.

Me gustaría proporcionar a ActionBar una versión separada del ícono, con solo la parte del "logotipo" y no las letras debajo, pero hasta ahora han estado vacías. Honestamente, no puedo encontrar ninguna respuesta a esto, y ni siquiera puedo encontrar la pregunta en ningún lado.

Phil Ringsmuth
fuente

Respuestas:

218

ActionBar utilizará el atributo android: logo de su manifiesto, si se proporciona uno. Eso le permite utilizar recursos dibujables separados para el icono (Lanzador) y el logotipo (ActionBar, entre otras cosas).

Joe
fuente
2
Sí. También puede utilizar un estilo personalizado para su barra de acción para proporcionar un logotipo o un icono que se utilizará en lugar de los proporcionados por el manifiesto.
adamp
@Joe, cualquier solución para API <11 usando AppCompat
cafebabe1991
49

En AndroidManifest.xml:

<application
    android:icon="@drawable/launcher"
    android:label="@string/app_name"
    android:name="com..."
    android:theme="@style/Theme">...</Application>

En styles.xml: (Ver android:icon)

<style name="Theme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:icon">@drawable/icon</item>
</style>
AlikElzin-kilaka
fuente
android: logo también funcionará. No conozco la diferencia.
AlikElzin-kilaka
Perdón por romper las heridas curativas :-) Pero la diferencia es que la solución de cambio de estilo sugerida aquí aplica el ícono personalizado solo a la barra de acción, donde la definición android:logodel manifiesto en el manifiesto también podría afectar otras áreas.
dbm
@dbm, ¿podría dar un ejemplo de "otras áreas"?
AlikElzin-kilaka
2
Sí, sentí tanta curiosidad que comencé a buscar en Google y esto es lo que dice el sitio para desarrolladores de Android: developer.android.com/guide/topics/manifest/… . Sin andorid:iconembargo, no me queda claro en qué se diferencia del atributo: developer.android.com/guide/topics/manifest/…
dbm
2
Barra de acción doc dice también puede agregar android:iconal <activity>elemento, por lo que podría cambiar fácilmente para diferentes actividades. Lo intenté y funcionó muy bien. No es necesario meterse con un tema personalizado o preocuparse por afectar todas las actividades.
Jason
18

Prueba esta línea

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);
Félix Cruz
fuente
1
NOTA: setHomeAsUpIndicatores la API de Android 18+.
Joshua Pinter
8

Si está utilizando AppCompat, la única forma de configurar el ícono de ActionBar en dispositivos que ejecutan Gingerbread (API 10) o inferior es configurando el atributo android: icon en cada Actividad en su manifiesto o configurando el dibujable mediante programación.

<manifest>
    <application>
        ...
        <activity android:name="com.your.ActivityName"
            ...
            android:icon="@drawable/ab_logo"/>
        ...
   </application>
</manifest>

Actualización: tenga en cuenta, sin embargo, que el icono de la aplicación se anulará si establece el atributo android: icon en la actividad de inicio. La única solución que conozco es tener una actividad de bienvenida o ficticia que luego inicie su actividad principal.

La cosa
fuente
no funciona !! ¿Lo has probado? Por favor encuentre una solución, la necesito.
Apurva
8

Inspirado por TheIT, conseguí que esto funcionara manipulando el archivo de manifiesto, pero de una manera ligeramente diferente. Configure el icono en la configuración de la aplicación para que la mayoría de las actividades obtengan el icono. En la actividad en la que desea mostrar el logotipo, agregue el atributo android: logo a la declaración de actividad. En el siguiente ejemplo, solo LogoActivity debería tener el logotipo, mientras que los demás lo utilizarán por defecto como icono.

<application
    android:name="com.your.app"
    android:icon="@drawable/your_icon"
    android:label="@string/app_name">

    <activity
        android:name="com.your.app.LogoActivity"
        android:logo="@drawable/your_logo"
        android:label="Logo Activity" >

    <activity
        android:name="com.your.app.IconActivity1"
        android:label="Icon Activity 1" >

    <activity
        android:name="com.your.app.IconActivity2"
        android:label="Icon Activity 2" >

</application>

¡Espero que esto ayude a alguien más!

orgulloso padre
fuente
Estoy usando AppCompat v7 porque quiero ser compatible con Android 2.3, pero su método no funciona.
liam xu
6

Inténtelo, si usa "extiende AppCompatActivity" y presenta la barra de acciones.

 ActionBar eksinbar=getSupportActionBar();
if (eksinbar != null) {
    eksinbar.setDisplayHomeAsUpEnabled(true);
    eksinbar.setHomeAsUpIndicator(R.mipmap.imagexxx);
}
Mustafa
fuente
3

creando logo

en carpetas " drawable-..." crear en todos ellos logo.png. La ubicación de las carpetas: [YOUR APP]\app\src\main\res

En AndroidManifest.xml, agregue la línea: android:logo="@drawable/logo"

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:logo="@drawable/logo"
    ...

Eso es.

awariat
fuente
0

Tal vez quiera comprobar esto, tengo todo lo que necesita para los iconos de su aplicación

http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

actualizar

Creo que por defecto usa el ícono de su lanzador ... Su mejor opción es crear una imagen separada ... Diseñada para la barra de acción y usándola. Para comprobarlo: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

Stevanicus
fuente
Gracias por ese vínculo. Es posible que termine eliminando las letras de mi ícono y usando el mismo ícono de "logotipo" en toda la aplicación, pero es posible que aún necesite usar una versión más pequeña o una versión ligeramente diferente en ActionBar, y eso es lo que estoy tratando de averiguar.
Phil Ringsmuth