Android: Comment changer l'icône ActionBar «Accueil» pour qu'elle soit autre chose que l'icône de l'application?

114

L'icône principale de mon application se compose de deux parties en une seule image: un logo et quelques lettres en dessous. Cela fonctionne bien pour l'icône du lanceur de l'application, mais lorsque l'icône apparaît sur le bord gauche de l'ActionBar, les lettres sont coupées et cela n'a pas l'air bien.

Je voudrais fournir à l'ActionBar une version séparée de l'icône, avec seulement la partie «logo» et non les lettres en dessous, mais jusqu'à présent, elles sont vides. Honnêtement, je ne trouve aucune réponse à cela, et je ne trouve même pas la question elle-même nulle part.

Phil Ringsmuth
la source

Réponses:

218

L'ActionBar utilisera l' attribut android: logo de votre manifeste, le cas échéant. Cela vous permet d'utiliser des ressources dessinables séparées pour l'icône (Launcher) et le logo (ActionBar, entre autres).

Joe
la source
2
Oui. Vous pouvez également utiliser un style personnalisé pour votre barre d'actions afin de fournir un logo ou une icône qui sera utilisé à la place de ceux fournis par le manifeste.
adamp le
@Joe, Toute solution pour API <11 utilisant AppCompat
cafebabe1991
49

Dans AndroidManifest.xml:

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

Dans styles.xml: (Voir 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
la source
android: le logo fonctionnera également. Je ne connais pas la différence.
AlikElzin-kilaka
Désolé pour la guérison des blessures :-) Mais la différence est que la solution de changement de style suggérée ici applique l'icône personnalisée uniquement à la barre d'action, où définir le android:logodans le manifeste peut également affecter d'autres domaines.
dbm le
@dbm, pouvez-vous s'il vous plaît donner un exemple «d'autres domaines»?
AlikElzin-kilaka
2
Oui, je suis devenu tellement curieux que j'ai commencé à chercher sur Google et c'est ce que dit le site des développeurs Android: developer.android.com/guide/topics/manifest/… . Je ne vois pas clairement en quoi cela diffère de l' andorid:iconattribut: developer.android.com/guide/topics/manifest/…
dbm
2
La documentation de la barre d'action indique également que vous pouvez ajouter android:iconà l' <activity>élément, de sorte que vous puissiez facilement le modifier pour différentes activités. J'ai essayé cela et cela a très bien fonctionné. Pas besoin de jouer avec un thème personnalisé ou de vous soucier d'affecter toutes les activités.
Jason le
18

Veuillez essayer cette ligne

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);
Felix Cruz
la source
1
REMARQUE: setHomeAsUpIndicatorest l'API Android 18+.
Joshua Pinter
8

Si vous utilisez AppCompat, le seul moyen de définir l'icône ActionBar sur les appareils exécutant Gingerbread (API 10) ou une version antérieure consiste à définir l'attribut android: icon dans chaque activité de votre manifeste ou à définir le dessinable par programme.

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

Mise à jour: sachez cependant que l'icône de l'application sera remplacée si vous définissez l'attribut android: icon sur l'activité de lancement. Le seul travail que je connaisse est d'avoir une activité splash ou factice qui lance ensuite votre activité principale.

TheIT
la source
ne fonctionne pas !! L'as tu essayé? Veuillez trouver une solution dont j'ai besoin.
Apurva
8

Inspiré par TheIT, je viens de faire fonctionner cela en manipulant le fichier manifeste, mais d'une manière légèrement différente. Définissez l'icône dans les paramètres de l'application afin que la majorité des activités obtiennent l'icône. Sur l'activité où vous souhaitez afficher le logo, ajoutez l'attribut android: logo à la déclaration d'activité. Dans l'exemple suivant, seul LogoActivity doit avoir le logo, tandis que les autres seront par défaut icon.

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

J'espère que cela aide quelqu'un d'autre!

fiergeekdad
la source
J'utilise AppCompat v7, car je souhaite prendre en charge Android 2.3, mais votre méthode ne fonctionne pas.
liam xu
6

Veuillez essayer, si vous utilisez «étend AppCompatActivity» et présentez la barre d’action.

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

création de logo

dans les dossiers " drawable-..." créer dans chacun d'eux logo.png. L'emplacement des dossiers: [YOUR APP]\app\src\main\res

Dans AndroidManifest.xml, ajoutez une ligne: android:logo="@drawable/logo"

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

c'est tout.

Awariat
la source
0

Je veux peut-être vérifier ceci, j'ai tout ce dont vous avez besoin pour les icônes de votre application

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

mettre à jour

Je pense que par défaut, il utilise l'icône de votre lanceur ... Votre meilleur pari est de créer une image séparée ... Conçu pour la barre d'action et en utilisant cela. Pour cette vérification: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

Stevanicus
la source
Merci pour ce lien, et je pourrais finir par supprimer les lettres de mon icône et utiliser la même icône "logo" dans toute l'application, mais il se peut que je doive encore en utiliser une version plus petite ou une version légèrement différente sur l'ActionBar, et c'est ce que j'essaie de découvrir.
Phil Ringsmuth le