So passen Sie die Schaltfläche "Zurück" in ActionBar an

188

Ich konnte den Hintergrund, das Logo und
die Textfarbe der Aktionsleiste mithilfe der folgenden Vorschläge anpassen: Android: Wie kann ich das ActionBar-Symbol "Startseite" so ändern, dass es nicht das App-Symbol ist?
ActionBar-
Textfarbe ActionBar-Hintergrundbild

Das letzte Stück, das ich anpassen möchte, ist das Bild der Zurück-Schaltfläche. Es ist standardmäßig grau und ich möchte, dass es weiß ist. Entweder die Farbe zu ändern, ein Zeichenelement anzugeben oder es einfach transparent zu machen (und den Chevron zu meinem benutzerdefinierten Logo hinzuzufügen), würde funktionieren. Wie gehe ich vor?

Sunil Gowda
quelle
1
In der Aktionsleiste befindet sich keine Schaltfläche ZURÜCK. Die Schaltfläche ZURÜCK befindet sich in der Systemleiste oder nicht auf dem Bildschirm (für Geräte mit einer Schaltfläche ZURÜCK außerhalb des Bildschirms).
CommonsWare
1
@CommonsWare, ich bin mir nicht sicher, wie der 'linke Chevron' in der Aktionsleiste heißt - aber das ist einer, den ich als Zurück-Button bezeichne. Ich denke, es wird erwartet, dass die physische Zurück-Taste auf Android-Geräten in Zukunft ersetzt wird.
Sunil Gowda
13
Nein und nein. Das ist die "Auf" -Anzeige (trotz der Pfeilausrichtung). Sie aktivieren es über setDisplayHomeAsUpEnabled()on ActionBar. Es soll ausdrücklich NICHT einfach "zurück" gehen. Dies bedeutet, dass durch Tippen auf das App-Symbol eine Hierarchie "nach oben" verschoben wird und nicht zur vorherigen Aktivität zurückgekehrt wird (ebenso wie die Schaltfläche ZURÜCK in der Systemleiste).
CommonsWare
2
"Was ist also mit den neuen Geräten, die keine physische Zurück-Taste haben? Zeigen alle eine 'weiche' Zurück-Taste an?" - Alle sollten eine BACK-Taste in der Systemleiste haben.
CommonsWare
3
nur wollen , in vielen Fällen die UP - Taste hinzufügen WILL einfach zurück. Siehe "Wenn der zuvor angezeigte Bildschirm auch das hierarchische übergeordnete Element des aktuellen Bildschirms ist, führt das Drücken der Zurück-Taste zum gleichen Ergebnis wie das Drücken einer Aufwärts-Taste - dies ist ein häufiges Ereignis." Unter developer.android.com/design/patterns /navigation.html
Dori

Antworten:

390

Der Leistungsindikator "up" wird durch eine Zeichnung bereitgestellt, die im homeAsUpIndicatorAttribut des Themas angegeben ist. Um es mit Ihrer eigenen benutzerdefinierten Version zu überschreiben, wäre es ungefähr so:

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>
</style>

Wenn Sie Pre-3.0 mit Ihrer Anwendung unterstützen, stellen Sie sicher, dass Sie diese Version des benutzerdefinierten Designs values-v11oder ähnliches einfügen.

Jake Wharton
quelle
10
funktioniert auch bei mir. Ich habe innerhalb des als ActionBarStyle festgelegten Stils wie in AOSP auf Github deklariert, aber es hat nicht funktioniert - das Ausgehen in das Hauptthema hat den Trick getan! +1
Dori
37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>hat bei mir nicht funktioniert, aber <item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>funktioniert. Schätze, es ist Android-Version Sache
Michał K
6
Gibt es eine Möglichkeit, die obere und untere Polsterung dafür auf 0dp zu setzen?
James McCracken
3
@JamesMcCracken Die einzige Möglichkeit, dies zu tun, war ein benutzerdefiniertes Layout.
Greg7gkb
4
Hat jemand diese Arbeit mit gemacht Navigation Drawer? Ich denke, ActionBarDrawerToggleder Up-Indikator wird durch einen eigenen ersetzt, daher hat das Setzen des Stils keine Auswirkung ...
Lucas Jota
89

Sie können es also programmgesteuert einfach ändern, indem Sie die Funktion homeAsUpIndicator () verwenden, die in Android API Level 18 und höher hinzugefügt wurde.

ActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);

Wenn Sie die Support-Bibliothek verwenden

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

Hitman Snipe
quelle
5
Wenn Sie eine Schublade verwenden, müssen Sie anrufen, drawerToggle.setDrawerIndicatorEnabled(false);bevor Sie den Indikator ändern
Zahnseide
2
@Floss Danke, setDrawerIndicatorEnabled (false / true); Ich habe mein Problem gelöst, die Home-Schaltfläche basierend auf meinen Anforderungen als konsistent 'Zurück' und (Schublade öffnen / Schublade schließen) festzulegen.
Ashraf Alshahawy
1
@Floss drawerToggle.setDrawerIndicatorEnabled (false); es funktioniert für mich :)
Kontext
30

Ich habe die Frage überprüft. Hier sind die Schritte, denen ich folge. Der Quellcode wird auf GitHub gehostet: https://github.com/jiahaoliuliu/sherlockActionBarLab

Überschreiben Sie den tatsächlichen Stil für Geräte vor Version 11.

Kopieren Sie den folgenden Code und fügen Sie ihn in die Datei styles.xml des Ordners mit den Standardwerten ein.

<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

Beachten Sie, dass das übergeordnete Element in ein beliebiges Sherlock-Thema geändert werden kann.

Überschreiben Sie den tatsächlichen Stil für die v11 + -Geräte.

Erstellen Sie in demselben Ordner, in dem sich die Ordnerwerte befinden, einen neuen Ordner mit dem Namen values-v11. Android sucht automatisch nach dem Inhalt dieses Ordners für Geräte mit API oder höher.

Erstellen Sie eine neue Datei mit dem Namen styles.xml und fügen Sie den folgenden Code in die Datei ein:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="android:homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

Beachten Sie, dass der Name des Stils mit der Datei im Standardwertordner übereinstimmen muss und anstelle des Elements homeAsUpIndicator android: homeAsUpIndicator heißt.

Das Problem besteht darin, dass die Sherlock-Aktionsleiste für Geräte mit API 11 oder höher die Standard-Aktionsleiste verwendet, die mit Android geliefert wird. Der Schlüsselname lautet android: homeAsUpIndicator. Für Geräte mit API 10 oder niedriger verwendet die Sherlock Action Bar eine eigene ActionBar, die als "homeAsUpIndicator" bezeichnet wird.

Verwenden Sie das neue Thema im Manifest

Ersetzen Sie das Thema für die Anwendung / Aktivität in der AndroidManifest-Datei:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >
jiahao
quelle
2
Und Sie können @ drawable / abc_ic_ab_back_holo_light oder @ drawable / abc_ic_ab_back_holo_dark ausprobieren, wenn Sie nach bereits verfügbaren Holo-Symbolen suchen.
Mason Lee
25

Das Ändern des Zurück-Navigationssymbols unterscheidet sich für ActionBar und Symbolleiste.

Für das ActionBar-Überschreibungsattribut homeAsUpIndicator:

<style name="CustomThemeActionBar" parent="android:Theme.Holo">
    <item name="homeAsUpIndicator">@drawable/ic_nav_back</item>
</style>

Für das Toolbar-Überschreibungsattribut navigationIcon:

<style name="CustomThemeToolbar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="navigationIcon">@drawable/ic_nav_back</item>
</style>
duviteck
quelle
19

Ich habe den folgenden Code gemacht onCreate()und mit mir gearbeitet

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);
Waleed A. Elgalil
quelle
5

Wenn Sie die Symbolleiste verwenden, benötigen Sie diese Lösungen nicht. Sie müssen nur das Thema der Symbolleiste ändern

app:theme="@style/ThemeOverlay.AppCompat.Light"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

Wenn Sie eine dark.actionBar verwenden, wird Ihre Zurück-Schaltfläche weiß, andernfalls wird sie schwarz, wenn Sie ein helles Actionbar-Thema verwenden.

Oguz Ozcan
quelle
Ihr Code funktioniert für mich, aber können wir die Farbe dieses Indikators ändern?
Steve Luck
2
colorControlNormal und android: textColorSecondary-Werte sind dafür verantwortlich, aber ich bin mir nicht sicher, was sich diese Werte sonst noch ändern. Sie können es selbst versuchen, indem Sie diese Werte in Ihrem Symbolleisten-Design definieren.
Oguz Ozcan
Ich verwende "app: theme =" @ style / ThemeOverlay.AppCompat.Light "", um das Navigationssymbol im Hintergrundweiß anzuzeigen, aber es zeigt das graue Standardsymbol an. Ich muss es in blau ändern. "colorControlNormal und android: textColorSecondary" funktioniert nicht.
Steve Luck
2
Verwenden Sie ein übergeordnetes Design mit "ThemeOverlay.AppCompat.Light" als übergeordnetes Element. Das könnte funktionieren.
Oguz Ozcan
1
Ich habe die Lösung gefunden, um das Navigationssymbol mit name = "colorControlNormal" und nicht name = "android: colorControlNormal" zu ändern. Aber ich möchte vielleicht zum anderen Drawable wechseln?
Steve Luck
2

Fach dies:

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

innen onCreate();

Abdurahman Popal
quelle
Es funktioniert, aber wie man früher zurück kommt
Nadimuddin
0

Ich habe das Bild back.png in der Projektdatei menifest.xml verwendet. Es ist gut, im Projekt zu arbeiten.

<activity
        android:name=".YourActivity"
         android:icon="@drawable/back"
        android:label="@string/app_name" >
    </activity>
Kulwant Singh Bhari
quelle
0

Ich hatte das gleiche Problem mit der Symbolrichtung der Home-Schaltfläche der Aktionsleiste, da die Verwaltung des Symbols im Gradle Resource-Verzeichnissymbol fehlgeschlagen ist

Wie im arabischen Gradle-Ressourcenverzeichnis setzen Sie ein Symbol in x-hdpi und in der englischen Gradle-Ressource denselben Symbolnamen in einen Ordner mit unterschiedlicher Dichte wie xx-hdpi, sodass in APK zwei gleiche Symbolnamen in verschiedenen Verzeichnissen vorhanden sind, also Ihr Gerät Das dichteabhängige Symbol kann RTL oder LTR sein

user2508815
quelle