Zaktualizowałem mój SDK do API 21, a teraz ikona cofania / w górę jest czarną strzałką skierowaną w lewo.
Chciałbym, żeby był szary. Jak mogę to zrobić?
Na przykład w Sklepie Play strzałka jest biała.
Zrobiłem to, aby ustawić niektóre style. Użyłem @drawable/abc_ic_ab_back_mtrl_am_alpha
dla homeAsUpIndicator
. Ta rysunkowa jest przezroczysta (tylko alfa), ale strzałka jest wyświetlana na czarno. Zastanawiam się, czy mogę ustawić kolor tak, jak robię to w DrawerArrowStyle
. Lub jeśli jedynym rozwiązaniem jest utworzenie mojego @drawable/grey_arrow
i użycie go homeAsUpIndicator
.
<!-- Base application theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:actionBarStyle" tools:ignore="NewApi">@style/MyActionBar</item>
<item name="actionBarStyle">@style/MyActionBar</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
<item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
<item name="android:homeAsUpIndicator" tools:ignore="NewApi">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
</style>
<!-- ActionBar style -->
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
<item name="android:background">@color/actionbar_background</item>
<!-- Support library compatibility -->
<item name="background">@color/actionbar_background</item>
</style>
<!-- Style for the navigation drawer icon -->
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@color/actionbar_text</item>
</style>
Moje dotychczasowe rozwiązanie polegało na pobraniu @drawable/abc_ic_ab_back_mtrl_am_alpha
, który wydaje się być biały, i pomalowaniu go na żądany kolor za pomocą edytora zdjęć. Działa, chociaż wolałbym używać @color/actionbar_text
jak w DrawerArrowStyle
.
źródło
homeAsUpIndicator
/,@drawable/abc_ic_ab_back_mtrl_am_alpha
aby biała strzałka wsteczna była biała. Wolę to niż włamanie się do Javy.Odpowiedzi:
Możesz to osiągnąć za pomocą kodu. Uzyskaj rysowaną strzałkę wstecz, zmień jej kolor za pomocą filtra i ustaw ją jako przycisk cofania.
Wersja 1:
Począwszy od API 23 (Marshmallow) zasób do rysowania
abc_ic_ab_back_mtrl_am_alpha
zmienia się naabc_ic_ab_back_material
.EDYTOWAĆ:
Możesz użyć tego kodu, aby osiągnąć pożądane wyniki:
źródło
ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha)
ponieważgetResources.getDrawable(int)
jest przestarzałyPatrząc na
Toolbar
iTintManager
źródło,drawable/abc_ic_ab_back_mtrl_am_alpha
jest zabarwione wartością atrybutu stylucolorControlNormal
.Próbowałem ustawić to w moim projekcie (z
<item name="colorControlNormal">@color/my_awesome_color</item>
moim motywem), ale nadal jest dla mnie czarne.Aktualizacja :
Znaleziono to. Musisz ustawić
actionBarTheme
atrybut ( nieactionBarStyle
) za pomocącolorControlNormal
.Na przykład:
źródło
colorControlNormal
motywu głównego zamiast na drodzeactionBarTheme
to droga.Wypróbowałem wszystkie sugestie powyżej. Jedynym sposobem, w jaki udało mi się zmienić kolor domyślnej ikony nawigacji Strzałka przycisku Wstecz na moim pasku narzędzi, jest ustawienie colorControlNormal w podstawowym temacie takim jak ten. Prawdopodobnie z powodu faktu, że rodzic używa Theme.AppCompat.Light.NoActionBar
źródło
style.xml
colorControlNormal
ma przedrostka .android:
Musisz dodać pojedynczy atrybut do motywu paska narzędzi -
Zastosuj ten toolbar_theme do paska narzędzi.
LUB
możesz bezpośrednio zastosować do swojego motywu -
źródło
Poprostu dodaj
do bieżącego motywu aplikacji.
źródło
jeśli używasz
Toolbar
, możesz spróbować tegoźródło
Jak powiedziano w większości poprzednich komentarzy, rozwiązaniem jest dodanie
<item name="colorControlNormal">@color/white</item>
do motywu aplikacji. Ale potwierdź, że nie masz innego motywu zdefiniowanego w elemencie paska narzędzi Toolbar w układzie.źródło
Odpowiedź Carlesa jest poprawną odpowiedzią, ale kilka metod, takich jak getDrawable (), getColor (), stało się przestarzałe w momencie, gdy piszę tę odpowiedź . Tak więc zaktualizowana odpowiedź brzmi:
Po kilku innych zapytaniach dotyczących przepływu stosu odkryłem, że wywołanie ContextCompat.getDrawable () jest podobne do
A ContextCompat.getColor () jest podobny do
Link 1: ContextCompat.getDrawable ()
Link 2: ContextCompat.getColor ()
źródło
abc_ic_ab_back_material
zamiastabc_ic_ab_back_mtrl_am_alpha
.Znalazłem rozwiązanie, które działa przed Lollipop. Ustaw „colorControlNormal” w „actionBarWidgetTheme”, aby zmienić kolor homeAsUpIndicator. Modyfikowanie odpowiedzi rockgecko z góry, aby wyglądała następująco:
źródło
W compileSdkVersoin 25 możesz to zrobić:
styles.xml
źródło
Użyj poniższej metody:
Teraz możesz ustawić rysowanie za pomocą:
źródło
Zmień kolor ikony nawigacji w menu
W style.xml:
źródło
Innym rozwiązaniem, które może Ci się przydać, jest niezadeklarowanie paska narzędzi jako paska akcji aplikacji (przez
setActionBar
lubsetSupportActionBar
) i ustawienie ikony powrotu w swoim polu onActivityCreated za pomocą kodu wymienionego w innej odpowiedzi na tej stronieTeraz nie otrzymasz połączenia
onOptionItemSelected
zwrotnego po naciśnięciu przycisku Wstecz. Możesz jednak zarejestrować się za pomocąsetNavigationOnClickListener
. Tym się właśnie zajmuję:Nie jestem pewien, czy to zadziała, jeśli będziesz pracować z elementami menu.
źródło
Napotkaliśmy ten sam problem i wszystko, czego chcieliśmy, to ustawić
aplikacja: collapseIcon
atrybut na pasku narzędzi na końcu, którego nie znaleźliśmy, ponieważ nie jest zbyt dobrze udokumentowany :)
źródło
Spróbuj tego
wywołanie funkcji:
źródło
Oto, co zadziałało dla mnie:
Dodaj poniższe atrybuty do swojego motywu.
Aby zmienić pasek narzędzi / strzałkę wstecz na pasku narzędzi powyżej interfejsu 21
Aby zmienić pasek narzędzi / strzałkę wstecz paska narzędzi poniżej interfejsu 21
Aby zmienić tryb działania strzałkę wstecz
Aby usunąć cień paska narzędzi / działania
Aby zmienić przepełnienie paska akcji, można go pobrać
Uwaga: zamiast „android: src” użyto „srcCompat”, ponieważ obsługa rysunków wektorowych dla interfejsu API poniżej 21
źródło
Rozwiązanie jest bardzo proste
Po prostu wstaw następującą linię do swojego stylu o nazwie AppTheme
Teraz cały kod xml będzie wyglądał jak pokazano poniżej (styl domyślny).
źródło
Właśnie zmieniłem motyw paska narzędzi na @ style / ThemeOverlay.AppCompat.Light
i strzała stała się ciemnoszara
źródło
Oto jak to zrobiłem w Material Components:
źródło
Możesz zmienić kolor ikony nawigacji programowo w następujący sposób:
źródło
Wystarczy wyjąć
android:homeAsUpIndicator
ihomeAsUpIndicator
od tematu i będzie dobrze.color
Atrybut w swoimDrawerArrowStyle
stylu musi wystarczyć.źródło
color
atrybut). Strzałka szuflady jest nieco większa.Chyba że istnieje lepsze rozwiązanie ...
To, co zrobiłem, to zrobić
@drawable/abc_ic_ab_back_mtrl_am_alpha
zdjęcia, które wydają się białe, i pomalować je na żądany kolor za pomocą edytora zdjęć.źródło