Come personalizzare il pulsante Indietro su ActionBar


188

Sono stato in grado di personalizzare lo sfondo della barra delle azioni, l'immagine del logo e il colore del testo usando i suggerimenti di questi:
Android: come modificare l'icona "Home" di ActionBar in modo che non sia l'icona dell'app?
Colore del testo di
ActionBar Immagine di sfondo di ActionBar

L'ultimo pezzo che voglio personalizzare è l'immagine del pulsante Indietro. È grigio per impostazione predefinita e vorrei che fosse bianco. O cambiare il colore, specificare un disegno o semplicemente renderlo trasparente (e aggiungere il gallone alla mia immagine logo personalizzata) funzionerebbe. Come posso procedere?


1
Non c'è alcun pulsante INDIETRO sulla barra delle azioni. Il pulsante INDIETRO si trova sulla barra di sistema o non è sullo schermo (per i dispositivi con un pulsante INDIETRO fuori dallo schermo).
CommonsWare,

1
@CommonsWare, non sono sicuro di come si chiama il "chevron sinistro" nella barra delle azioni, ma è quello a cui mi riferisco come il pulsante Indietro. Penso che dovrebbe sostituire il pulsante fisico indietro sui dispositivi Android in futuro.
Sunil Gowda,

13
No e no Questo è l'indicatore "su" (nonostante l'orientamento della freccia). Lo abiliti tramite setDisplayHomeAsUpEnabled()on ActionBar. In particolare, NON dovrebbe semplicemente "tornare indietro". Significa che toccando l'icona dell'app si "salirà" una gerarchia piuttosto che tornare all'attività precedente (come fa il pulsante INDIETRO sulla barra di sistema).
CommonsWare,

2
"quindi per quanto riguarda i nuovi dispositivi che non dispongono di un pulsante Indietro fisico, visualizzano tutti un pulsante Indietro" soft "- tutti dovrebbero avere un pulsante INDIETRO nella barra di sistema.
CommonsWare,

3
basta voler aggiungere in molti casi, il tasto UP SARA semplicemente tornare indietro. Vedi "Quando la schermata visualizzata in precedenza è anche il genitore gerarchico della schermata corrente, premendo il tasto Indietro si otterrà lo stesso risultato della pressione di un pulsante Su - questo è un evento comune." Da developer.android.com/design/patterns /navigation.html
Dori

Risposte:


390

L'indicatore di convenienza "up" è fornito da un drawable specificato homeAsUpIndicatornell'attributo del tema. Per sovrascriverlo con la tua versione personalizzata sarebbe qualcosa del genere:

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

Se stai supportando pre-3.0 con la tua applicazione, assicurati di inserire questa versione del tema personalizzato values-v11o simile.


10
funziona anche per me. Stavo dichiarando all'interno del set di stili come il mio ActionBarStyle come in AOSP su github ma non funzionava - spostarsi sul tema principale ha fatto il trucco! +1
Dori,

37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>non ha funzionato per me, ma <item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>ha funzionato. Immagino sia la versione per Android
Michał K,

6
C'è un modo per impostare l'imbottitura superiore e inferiore per questo su 0dp?
James McCracken,

3
@JamesMcCracken l'unico modo in cui sono stato in grado di farlo è stato tramite un layout personalizzato.
greg7gkb,

4
Qualcuno ha fatto questo lavoro con Navigation Drawer? Immagino che ActionBarDrawerTogglesostituisca l'indicatore up con uno proprio, quindi impostarlo sullo stile non ha alcun effetto ...
Lucas Jota

89

Quindi puoi cambiarlo programmaticamente facilmente usando la funzione homeAsUpIndicator () che è stata aggiunta in API 18 Android e superiore.

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

Se si utilizza la libreria di supporto

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


5
Se stai usando un cassetto, devi chiamare drawerToggle.setDrawerIndicatorEnabled(false);prima di cambiare l'indicatore
Floss

2
@Floss Grazie, setDrawerIndicatorEnabled (false / true); risolto il problema per impostare il pulsante Home su "Indietro" e (Apri cassetto / Chiudi cassetto) coerenti in base alle mie esigenze.
Ashraf Alshahawy,

1
@Floss drawerToggle.setDrawerIndicatorEnabled (false); funziona per me :)
Contesto

30

Ho verificato la domanda. Ecco i passaggi che seguo. Il codice sorgente è ospitato su GitHub: https://github.com/jiahaoliuliu/sherlockActionBarLab

Sostituisci lo stile attuale per i dispositivi pre-v11.

Copia e incolla il seguente codice nel file styles.xml della cartella dei valori predefiniti.

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

Nota che il genitore potrebbe essere cambiato in qualsiasi tema di Sherlock.

Sostituisci lo stile attuale per i dispositivi v11 +.

Nella stessa cartella in cui si trovano i valori della cartella, creare una nuova cartella denominata valori-v11. Android cercherà automaticamente il contenuto di questa cartella per dispositivi con API o superiore.

Crea un nuovo file chiamato styles.xml e incolla il seguente codice nel file:

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

Nota che il nome dello stile deve essere lo stesso del file nella cartella dei valori predefiniti e invece dell'elemento homeAsUpIndicator, si chiama android: homeAsUpIndicator.

Il problema dell'articolo è dovuto al fatto che per i dispositivi con API 11 o successive, Sherlock Action Bar utilizza la Action Bar predefinita fornita con Android, il cui nome chiave è android: homeAsUpIndicator. Ma per i dispositivi con API 10 o inferiore, Sherlock Action Bar utilizza la propria ActionBar, che l'indicatore home as up è chiamato semplice "homeAsUpIndicator".

Usa il nuovo tema nel manifest

Sostituisci il tema per l'applicazione / attività nel file AndroidManifest:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >

2
E puoi provare @ drawable / abc_ic_ab_back_holo_light o @ drawable / abc_ic_ab_back_holo_dark se stai cercando icone holo già disponibili.
Mason Lee

25

La modifica dell'icona di navigazione indietro differisce per ActionBar e Toolbar.

Per l'attributo override di ActionBar homeAsUpIndicator:

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

Per l' navigationIconattributo di sostituzione della barra degli strumenti :

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

19

Ho fatto il codice seguente onCreate()e ho lavorato con me

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

5

Se stai usando Toolbar, non hai bisogno di quelle soluzioni. Devi solo cambiare il tema della barra degli strumenti

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

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

Se stai usando un dark.actionBar il tuo pulsante Indietro sarà bianco altrimenti se stai usando un tema della barra delle azioni chiaro sarà nero.


Il tuo codice funziona per me, ma possiamo cambiare il colore di quell'indicatore?
Steve Luck,

2
colorControlNormal e android: i valori textColorSecondary ne sono responsabili ma non sono molto sicuro di cos'altro cambi anche questi valori. Puoi provare te stesso definendo questi valori sul tema delle barre degli strumenti.
Oguz Ozcan,

Sto usando "app: theme =" @ style / ThemeOverlay.AppCompat.Light "" per visualizzare navigationIcon sullo sfondo bianco, ma mostra l'icona grigia predefinita, devo cambiarla in blu. "colorControlNormal e android: textColorSecondary" non funziona.
Steve Luck,

2
Usa un tema personalizzato che ha "ThemeOverlay.AppCompat.Light" come genitore. Questo potrebbe funzionare.
Oguz Ozcan,

1
Ho trovato la soluzione per cambiare l'icona di navigazione, usando name = "colorControlNormal" non name = "android: colorControlNormal". Ma voglio passare all'altro disegno, forse?
Steve Luck,

2

vassoio questo:

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

dentro onCreate();


Funziona ma come tornare indietro indietro pulsante
Nadimuddin

0

Ho usato l'immagine back.png nel file menifest.xml del progetto. funziona bene nel progetto.

<activity
        android:name=".YourActivity"
         android:icon="@drawable/back"
        android:label="@string/app_name" >
    </activity>

0

Ho avuto lo stesso problema della direzione dell'icona del pulsante Home nella barra delle azioni, a causa della mancata gestione dell'icona nella directory della directory Gradle Resource

come nella directory delle risorse di Gradle in arabo metti l'icona in x-hdpi e nella risorsa di Gradle in inglese lo stesso nome di icona che inserisci in una cartella di densità diversa come xx-hdpi, in modo che in APK ci saranno due nomi di icone in diverse directory, quindi il tuo dispositivo selezionerà l'icona dipendente dalla densità può essere RTL o LTR

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.