Android: come cambiare l'icona "Home" di ActionBar in qualcosa di diverso dall'icona dell'app?


114

L'icona principale della mia applicazione è composta da due parti in un'immagine: un logo e alcune lettere sotto di esso. Funziona bene per l'icona di avvio dell'app, ma quando l'icona appare sul bordo sinistro della ActionBar, le lettere vengono tagliate e non ha un bell'aspetto.

Vorrei fornire alla ActionBar una versione separata dell'icona, con solo la parte "logo" e non le lettere sottostanti, ma finora sono risultate vuote. Onestamente non riesco a trovare alcuna risposta a questo e non riesco nemmeno a trovare la domanda stessa da nessuna parte.

Risposte:


218

La ActionBar utilizzerà l' attributo android: logo del tuo manifest, se fornito. Ciò ti consente di utilizzare risorse disegnabili separate per l'icona (Launcher) e il logo (ActionBar, tra le altre cose).


2
Sì. Puoi anche utilizzare uno stile personalizzato per la barra delle azioni per fornire un logo o un'icona che verranno utilizzati al posto di quelli forniti dal manifest.
adamp

@ Joe, Qualsiasi soluzione per API <11 utilizzando AppCompat
cafebabe1991

49

In AndroidManifest.xml:

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

In styles.xml: (Vedi 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>

android: anche il logo funzionerà. Non conosco la differenza.
AlikElzin-kilaka

Ci scusiamo per aver strappato le ferite in via di guarigione :-) Ma la differenza è che la soluzione di cambio di stile suggerita qui applica l'icona personalizzata solo alla barra delle azioni, dove la definizione di android:logonel manifest potrebbe influenzare anche altre aree.
dbm

@dbm, puoi fare un esempio di "altre aree"?
AlikElzin-kilaka

2
Sì, sono diventato così curioso che ho iniziato a cercarlo su Google e questo è ciò che dice il sito per sviluppatori Android: developer.android.com/guide/topics/manifest/… . Non mi è chiaro come questo sia diverso dall'attributo andorid:icon, però: developer.android.com/guide/topics/manifest/…
dbm

2
Barra azioni doc dice anche è possibile aggiungere android:iconal <activity>elemento, quindi si potrebbe facilmente cambiare per diverse attività. L'ho provato e ha funzionato benissimo. Non c'è bisogno di scherzare con un tema personalizzato o preoccuparsi di influenzare tutte le attività.
Jason

18

Per favore prova questa linea

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);

1
NOTA: setHomeAsUpIndicatorè Android API 18+.
Joshua Pinter,

8

Se stai usando AppCompat, l'unico modo per impostare l'icona ActionBar sui dispositivi che eseguono Gingerbread (API 10) o inferiore è impostare l'attributo android: icon in ogni attività nel tuo manifest o impostare il drawable programmaticamente.

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

Aggiornamento: tieni presente, tuttavia, che l'icona dell'applicazione verrà sovrascritta se imposti l'attributo android: icon nell'attività di avvio. L'unico lavoro che conosco è avere uno splash o un'attività fittizia che quindi avvia la tua attività principale.


non funziona !! L'hai provato? Per favore trova una soluzione che mi serve.
Apurva

8

Ispirato da TheIT, l'ho fatto funzionare manipolando il file manifest ma in un modo leggermente diverso. Impostare l'icona nelle impostazioni dell'applicazione in modo che la maggior parte delle attività ottenga l'icona. Sull'attività in cui desideri mostrare il logo, aggiungi l'attributo android: logo alla dichiarazione dell'attività. Nell'esempio seguente, solo LogoActivity dovrebbe avere il logo, mentre gli altri avranno come impostazione predefinita l'icona.

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

Spero che questo aiuti qualcun altro!


Sto usando AppCompat v7, perché voglio supportare Android 2.3, ma il tuo metodo non funziona.
liam xu

6

Si prega di provare, se si utilizza "estende AppCompatActivity" e presenta la barra delle azioni.

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

3

creazione del logo

nelle cartelle " drawable-..." create in tutte logo.png. La posizione delle cartelle: [YOUR APP]\app\src\main\res

In AndroidManifest.xml aggiungi la riga: android:logo="@drawable/logo"

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

questo è tutto.


0

Potrei controllare questo, ho tutto il necessario per le icone delle tue app

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

aggiornare

Penso che per impostazione predefinita utilizzi l'icona di avvio ... La soluzione migliore è creare un'immagine separata ... Progettata per la barra delle azioni e utilizzarla. Per quel controllo: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems


Grazie per il collegamento e potrei finire per rimuovere le lettere dalla mia icona e utilizzare la stessa icona "logo" in tutta l'app, ma potrei comunque aver bisogno di usarne una versione più piccola o una versione leggermente diversa su ActionBar, ed è quello che sto cercando di scoprire.
Phil Ringsmuth
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.