Android: Wie ändere ich das ActionBar-Startsymbol in etwas anderes als das App-Symbol?

114

Das Hauptsymbol meiner Anwendung besteht aus zwei Teilen in einem Bild: einem Logo und einigen Buchstaben darunter. Dies funktioniert gut für das Startsymbol für die App. Wenn das Symbol jedoch am linken Rand der ActionBar angezeigt wird, werden die Buchstaben abgeschnitten und es sieht nicht gut aus.

Ich möchte der ActionBar eine separate Version des Symbols zur Verfügung stellen, die nur den Teil "Logo" und nicht die Buchstaben darunter enthält, aber bisher leer war. Ich kann ehrlich gesagt keine Antwort darauf finden, und ich kann die Frage selbst nirgendwo finden.

Phil Ringsmuth
quelle

Antworten:

218

Die ActionBar verwendet das android: logo- Attribut Ihres Manifests, sofern eines angegeben ist. Auf diese Weise können Sie separate Zeichenressourcen für das Symbol (Launcher) und das Logo (unter anderem ActionBar) verwenden.

Joe
quelle
2
Ja. Sie können auch einen benutzerdefinierten Stil für Ihre Aktionsleiste verwenden, um entweder ein Logo oder ein Symbol bereitzustellen, das anstelle der im Manifest bereitgestellten verwendet wird.
Adamp
@ Joe, Jede Lösung für API <11 AppCompat mit
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: (Siehe 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
quelle
android: logo funktioniert auch. Ich kenne den Unterschied nicht.
AlikElzin-Kilaka
Es tut uns leid, dass Sie heilende Wunden aufgerissen haben :-) Der Unterschied besteht jedoch darin, dass die hier vorgeschlagene Lösung zur Stiländerung das benutzerdefinierte Symbol nur auf die Aktionsleiste anwendet, wobei die Definition android:logoim Manifest auch andere Bereiche betreffen kann.
DBM
@dbm, können Sie bitte ein Beispiel für "andere Bereiche" geben?
AlikElzin-Kilaka
2
Ja, ich wurde so neugierig, dass ich angefangen habe, darauf zu googeln, und das sagt die Android-Entwicklerseite: developer.android.com/guide/topics/manifest/… . Mir ist jedoch nicht klar, wie sich dies von dem andorid:iconAttribut unterscheidet: developer.android.com/guide/topics/manifest/…
dbm
2
In der Aktionsleiste wird außerdem angegeben, dass Sie android:icondem <activity>Element etwas hinzufügen können , damit Sie es problemlos für verschiedene Aktivitäten ändern können. Ich habe das versucht und es hat super funktioniert. Sie müssen sich nicht mit einem benutzerdefinierten Thema herumschlagen oder sich Sorgen machen, alle Aktivitäten zu beeinflussen.
Jason
18

Bitte versuchen Sie diese Zeile

getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_arrow);
Felix Cruz
quelle
1
HINWEIS: setHomeAsUpIndicatorist Android API 18+.
Joshua Pinter
8

Wenn Sie AppCompat verwenden, können Sie das ActionBar-Symbol auf Geräten mit Gingerbread (API 10) oder niedriger nur festlegen, indem Sie das Attribut android: icon in jeder Aktivität in Ihrem Manifest festlegen oder das Zeichenprogramm programmgesteuert festlegen.

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

Update: Seien Sie jedoch gewarnt, dass das Anwendungssymbol überschrieben wird, wenn Sie das Attribut android: icon in der Startaktivität festlegen. Die einzige mir bekannte Lösung besteht darin, eine Splash- oder Dummy-Aktivität zu haben, die dann Ihre Hauptaktivität startet.

Das es
quelle
funktioniert nicht !! Hast du es versucht? Bitte finden Sie eine Lösung, die ich brauche.
Apurva
8

Inspiriert von TheIT habe ich dies gerade durch Manipulieren der Manifestdatei auf eine etwas andere Art und Weise zum Laufen gebracht. Stellen Sie das Symbol in der Anwendungseinstellung so ein, dass die meisten Aktivitäten das Symbol erhalten. Fügen Sie in der Aktivität, in der Sie das Logo anzeigen möchten, das Attribut android: logo zur Aktivitätsdeklaration hinzu. Im folgenden Beispiel sollte nur LogoActivity das Logo haben, während die anderen standardmäßig das Symbol verwenden.

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

Hoffe das hilft jemand anderem raus!

stolzgeekdad
quelle
Ich verwende AppCompat v7, weil ich Android 2.3 unterstützen möchte, aber Ihre Methode funktioniert nicht.
Liam Xu
6

Bitte versuchen Sie es, wenn Sie "AppCompatActivity erweitern" verwenden und die Aktionsleiste anzeigen.

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

Logo erstellen

in Ordnern " drawable-..." in allen erstellen logo.png. Der Speicherort der Ordner: [YOUR APP]\app\src\main\res

In AndroidManifest.xml Zeile hinzufügen: android:logo="@drawable/logo"

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

das ist es.

Awariat
quelle
0

Vielleicht möchten Sie dies überprüfen und haben alles, was Sie für Ihre App-Symbole benötigen

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

aktualisieren

Ich denke, standardmäßig wird Ihr Startsymbol verwendet ... Am besten erstellen Sie ein separates Bild ... Entwickelt für die Aktionsleiste und verwenden dieses. Überprüfen Sie dazu: http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems

Stevanicus
quelle
Vielen Dank für diesen Link. Möglicherweise entferne ich die Buchstaben von meinem Symbol und verwende das gleiche "Logo" -Symbol in der gesamten App. Möglicherweise muss ich jedoch noch eine kleinere Version oder eine etwas andere Version verwenden die ActionBar, und das versuche ich herauszufinden.
Phil Ringsmuth