Jak dostosować przycisk Wstecz na pasku ActionBar


188

Udało mi się dostosować tło paska działania, obraz logo i kolor tekstu, korzystając z następujących sugestii:
Android: Jak zmienić ikonę „Strona główna” ActionBar na inną niż ikona aplikacji?
Kolor tekstu
ActionBar Obraz tła ActionBar

Ostatnim elementem, który chcę dostosować, jest obraz przycisku wstecz. Domyślnie jest szary i chciałbym, żeby był biały. Działa albo zmiana koloru, określenie rysunku lub po prostu uczynienie go przezroczystym (i dodanie szewronu do mojego niestandardowego obrazu logo). Jak mam to zrobić?


1
Na pasku akcji nie ma przycisku WSTECZ. Przycisk BACK znajduje się na pasku systemowym lub nie jest wyświetlany na ekranie (w przypadku urządzeń wyposażonych w przycisk BACK poza ekranem).
— CommonsWare

1
@CommonsWare, nie jestem pewien, jak nazywa się „lewy szewron” na pasku akcji - ale to właśnie nazywam przyciskiem wstecz. Myślę, że oczekuje się zastąpienia fizycznego przycisku Wstecz na urządzeniach z Androidem w przyszłości.
— Sunil Gowda

13
Nie i nie Jest to wskaźnik „w górę” (pomimo orientacji strzałki). Go włączyć poprzez setDisplayHomeAsUpEnabled()sprawie ActionBar. W szczególności NIE powinno się po prostu „cofać”. Oznacza to, że dotknięcie ikony aplikacji spowoduje przejście do „hierarchii” w górę, a nie powrót do poprzedniej aktywności (podobnie jak przycisk WSTECZ na pasku systemowym).
— CommonsWare

2
„a co z nowymi urządzeniami, które nie mają fizycznego przycisku powrotu, czy wszystkie wyświetlają„ miękki ”przycisk powrotu” - wszystkie powinny mieć przycisk BACK na pasku systemowym.
— CommonsWare,

3
tylko dodać w wielu przypadkach przycisk UP BĘDZIE po prostu wrócić. Zobacz „Gdy poprzednio oglądany ekran jest również hierarchicznym rodzicem bieżącego ekranu, naciśnięcie klawisza Wstecz będzie miało taki sam skutek jak naciśnięcie przycisku W górę - jest to częste zjawisko”. Developer.android.com/design/patterns /navigation.html
— Dori

Odpowiedzi:


390

Wskaźnik afordancji „w górę” zapewnia rysownica określona w homeAsUpIndicatoratrybucie motywu. Aby zastąpić go własną wersją niestandardową, byłoby to mniej więcej tak:

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

Jeśli aplikacja obsługuje wersję starszą niż 3.0, upewnij się, że umieściłeś tę wersję motywu niestandardowego w values-v11podobnym formacie.


10
też dla mnie działa. Zadeklarowałem wewnątrz zestawu stylów jako mojego ActionBarStyle jak w AOSP na githubie, ale to nie działało - przejście do głównego tematu załatwiło sprawę! +1
— Dori

37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>nie działało dla mnie, ale działało <item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>. Zgadnij, to jest wersja na Androida
— Michał K,

6
Czy jest jakiś sposób, aby ustawić górne i dolne wypełnienie dla tego ustawienia na 0dp?
— James McCracken

3
@JamesMcCracken jedynym sposobem, w jaki mogłem to zrobić, był niestandardowy układ.
— greg7gkb

4
Ktoś zmusił to do pracy Navigation Drawer? Myślę, że ActionBarDrawerTogglezamienia wskaźnik up na własny, dlatego ustawienie go na styl nie ma żadnego efektu ...
— Lucas Jota,

89

Możesz więc łatwo to programowo zmienić za pomocą funkcji homeAsUpIndicator (), która została dodana w interfejsie API Androida na poziomie 18 i wyższym.

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

Jeśli korzystasz z biblioteki wsparcia

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


5
Jeśli używasz szuflady, musisz zadzwonić drawerToggle.setDrawerIndicatorEnabled(false);przed zmianą wskaźnika
— Floss

2
@Floss Dziękujemy, setDrawerIndicatorEnabled (false / true); rozwiązałem problem polegający na ustawieniu przycisku strony głównej jako spójnego „Wstecz” i (Otwórz szufladę / Zamknij szufladę) w oparciu o moje wymagania.
— Ashraf Alshahawy

1
@Floss drawerToggle.setDrawerIndicatorEnabled (false); to działa dla mnie :)
— Kontekst

30

Sprawdziłem pytanie. Oto kroki, które wykonuję. Kod źródłowy znajduje się na GitHub: https://github.com/jiahaoliuliu/sherlockActionBarLab

Zastąp rzeczywisty styl urządzeń starszych niż 11.

Skopiuj i wklej poniższy kod w pliku styles.xml folderu wartości domyślnych.

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

Pamiętaj, że rodzic można zmienić na dowolny motyw Sherlocka.

Zastąp rzeczywisty styl urządzeń v11 +.

W tym samym folderze, w którym znajdują się wartości folderu, utwórz nowy folder o nazwie values-v11. Android automatycznie wyszuka zawartość tego folderu w przypadku urządzeń z interfejsem API lub nowszym.

Utwórz nowy plik o nazwie styles.xml i wklej następujący kod do pliku:

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

Pamiętaj, że nazwa stylu musi być taka sama jak plik w folderze wartości domyślnych, a zamiast elementu homeAsUpIndicator nazywa się android: homeAsUpIndicator.

Problem polega na tym, że w przypadku urządzeń z interfejsem API 11 lub nowszym pasek akcji Sherlock korzysta z domyślnego paska akcji dostarczanego z systemem Android, którego kluczową nazwą jest android: homeAsUpIndicator. Ale w przypadku urządzeń z API 10 lub niższym pasek akcji Sherlock wykorzystuje własny pasek ActionBar, który wskaźnik home up nazywa się prostym „homeAsUpIndicator”.

Użyj nowego motywu w manifeście

Zamień motyw aplikacji / działania w pliku AndroidManifest:

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

2
I możesz wypróbować @ drawable / abc_ic_ab_back_holo_light lub @ drawable / abc_ic_ab_back_holo_dark, jeśli szukasz już dostępnych ikon holo.
— Mason Lee

25

Zmiana ikony nawigacji wstecz różni się dla ActionBar i paska narzędzi.

W przypadku atrybutu zastąpienia ActionBar homeAsUpIndicator:

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

W przypadku navigationIconatrybutu zastąpienia paska narzędzi :

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

19

Zrobiłem poniższy kod onCreate()i pracowałem ze mną

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

5

Jeśli korzystasz z paska narzędzi Toolbar, nie potrzebujesz tych rozwiązań. Musisz tylko zmienić motyw paska narzędzi

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

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

Jeśli używasz paska dark.actionBar, przycisk Wstecz będzie biały, a jeśli używasz jasnego motywu paska akcji, będzie czarny.


Twój kod działa dla mnie, ale czy możemy zmienić kolor tego wskaźnika?
— Steve Luck

2
colorControlNormal i android: textColorSecondary wartości są za to odpowiedzialne, ale nie jestem pewien, co jeszcze te wartości również zmieniają. Możesz spróbować samodzielnie, definiując te wartości w motywie pasków narzędzi.
— Oguz Ozcan

Używam „app: theme =" @ style / ThemeOverlay.AppCompat.Light "”, aby wyświetlić element nawigacji w kolorze białym, ale wyświetla domyślną szarą ikonę, muszę zmienić go na niebieski. „colorControlNormal i android: textColorSecondary” nie działa.
— Steve Luck

2
Użyj niestandardowego motywu, który ma „ThemeOverlay.AppCompat.Light” jako element nadrzędny. To może zadziałać.
— Oguz Ozcan

1
Znalazłem rozwiązanie zmiany ikony nawigacji, używając name = "colorControlNormal" not name = "android: colorControlNormal". Ale może chcę przejść na inną z możliwością rysowania?
— Steve Luck,

2

podaj to:

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

wewnątrz onCreate();


Działa, ale jak wrócić wcześniejszym przyciskiem wstecz
— Nadimuddin

0

Użyłem obrazu back.png w pliku menifest.xml projektu. dobrze działa w projekcie.

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

0

Miałem ten sam problem z kierunkiem ikony przycisku na pasku akcji ze względu na brak zarządzania ikoną w ikonie katalogu zasobów Gradle

tak jak w katalogu zasobów Gradle arabskiego umieścisz ikonę w x-hdpi, a w języku angielskim Gradle zasób tę samą nazwę ikony umieściłeś w innym folderze gęstości, jak xx-hdpi, tak że w APK będą dwie takie same nazwy ikon w różnych katalogach, więc twoje urządzenie wybierz ikonę zależną od gęstości może być RTL lub LTR

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.