Jak zmienić kolor tylnej strzałki w nowym temacie materiału?
Zaktualizowałem moje SDK do API 21, a teraz ikona back/up to czarna strzałka skierowana w lewo.
Chciałbym, żeby była szara. Jak mogę to zrobić? Na przykład w Sklepie Play strzałka jest biała.Zrobiłem to, aby ustawić kilka stylów. Użyłem @drawable/abc_ic_ab_back_mtrl_am_alpha
dla homeAsUpIndicator
. Ten drawable jest przezroczysty (tylko alfa), ale strzałka jest wyświetlana na czarno. Zastanawiam się, czy mogę ustawić kolor tak jak w DrawerArrowStyle
. Lub jeśli jedynym rozwiązaniem jest stworzenie mojego {[4] } i użyj go do 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>
Moim dotychczasowym rozwiązaniem było wzięcie @drawable/abc_ic_ab_back_mtrl_am_alpha
, który wydaje się być biały, i pomalowanie go w Kolorze, jakiego Pragnę za pomocą edytora zdjęć. Działa, chociaż wolałbym użyć @color/actionbar_text
jak w DrawerArrowStyle
.
20 answers
Możesz to osiągnąć za pomocą kodu. Uzyskaj strzałkę wstecz, którą można narysować, zmodyfikuj jej kolor za pomocą filtra i ustaw go jako przycisk Wstecz.
final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);
Rewizja 1:
Począwszy od API 23 (Marshmallow) zasób drawable abc_ic_ab_back_mtrl_am_alpha
jest zmieniany na abc_ic_ab_back_material
.
EDIT:
Możesz użyć tego kodu, aby osiągnąć pożądane wyniki:
toolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.blue_gray_15), PorterDuff.Mode.SRC_ATOP);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-23 12:51:23
Patrząc na źródło Toolbar
i TintManager
, drawable/abc_ic_ab_back_mtrl_am_alpha
jest przyciemnione wartością atrybutu style colorControlNormal
.
Próbowałem ustawić to w moim projekcie( z <item name="colorControlNormal">@color/my_awesome_color</item>
w moim temacie), ale nadal jest dla mnie czarny.
Update :
Znalazłem. Musisz ustawić atrybut actionBarTheme
(Nie actionBarStyle
) z colorControlNormal
.
Eg:
<style name="MyTheme" parent="Theme.AppCompat.Light">
<item name="actionBarTheme">@style/MyApp.ActionBarTheme</item>
<item name="actionBarStyle">@style/MyApp.ActionBar</item>
<!-- color for widget theming, eg EditText. Doesn't effect ActionBar. -->
<item name="colorControlNormal">@color/my_awesome_color</item>
<!-- The animated arrow style -->
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>
<style name="MyApp.ActionBarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">
<!-- THIS is where you can color the arrow! -->
<item name="colorControlNormal">@color/my_awesome_color</item>
</style>
<style name="MyApp.ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="elevation">0dp</item>
<!-- style for actionBar title -->
<item name="titleTextStyle">@style/ActionBarTitleText</item>
<!-- style for actionBar subtitle -->
<item name="subtitleTextStyle">@style/ActionBarSubtitleText</item>
<!--
the actionBarTheme doesn't use the colorControlNormal attribute
<item name="colorControlNormal">@color/my_awesome_color</item>
-->
</style>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-22 01:21:32
Wypróbowałem wszystkie sugestie powyżej. Jedynym sposobem, w jaki udało mi się zmienić kolor ikony nawigacji domyślną strzałkę przycisku Wstecz w moim pasku narzędzi jest ustawienie colorControlNormal w motywie bazowym w ten sposób. Prawdopodobnie ze względu na fakt, że rodzic używa motywu.AppCompat.Światło.NoActionBar
<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorControlNormal">@color/white</item>
//the rest of your codes...
</style>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-15 09:17:44
Trzeba dodać pojedynczy atrybut do motywu paska narzędzi -
<style name="toolbar_theme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="colorControlNormal">@color/arrow_color</item>
</style>
Zastosuj ten pasek narzędzi_theme na pasku narzędzi.
Lub
Możesz bezpośrednio zastosować do swojego motywu -
<style name="CustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorControlNormal">@color/arrow_color</item>
//your code ....
</style>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-01 10:30:20
Po prostu dodaj
<item name="colorControlNormal">@color/white</item>
Do aktualnego motywu aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-23 14:32:02
Jak wspomniano 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 w układzie.
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-15 10:07:00
Jeśli używasz Toolbar
, Możesz spróbować tego
Drawable drawable = toolbar.getNavigationIcon();
drawable.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-19 09:59:08
Odpowiedź Carlesa jest poprawna, ale kilka metod jak getDrawable (), getColor () został przestarzały w momencie pisania tej odpowiedzi. Więc zaktualizowaną odpowiedzią będzie
Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);
Po kilku innych zapytaniach stackoverflow stwierdziłem, że wywołanie ContextCompat.getDrawable() jest podobny do
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return resources.getDrawable(id, context.getTheme());
} else {
return resources.getDrawable(id);
}
I ContextCompat.getColor () {[7] } jest podobny do
public static final int getColor(Context context, int id) {
final int version = Build.VERSION.SDK_INT;
if (version >= 23) {
return ContextCompatApi23.getColor(context, id);
} else {
return context.getResources().getColor(id);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:38
Na kompilacjidkversoin 25, możesz to zrobić:
Style.xml
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="android:textColorSecondary">@color/your_color</item>
</style>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-09 08:00:15
Zmień Kolor Ikony Menu Nav
W stylu.xml:
<style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
<item name="android:textColor">@color/colorAccent</item>
</style>
<style name="DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
<item name="spinBars">true</item>
<item name="color">@color/colorPrimaryDark</item>
</style>
In Mainfests.xml :
<activity android:name=".MainActivity"
android:theme="@style/MyMaterialTheme.Base"></activity>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-16 07:33:27
Znalazłem rozwiązanie, które działa przed lizakiem. Ustaw "colorControlNormal" w "actionBarWidgetTheme", aby zmienić kolor wskaźnika homeAsUpIndicator. Modyfikowanie odpowiedzi rockgecko z góry tak aby wyglądała tak:
<style name="MyTheme" parent="Theme.AppCompat.Light">
<item name="actionBarTheme">@style/MyApp.ActionBarTheme</item>
<item name="actionBarStyle">@style/MyApp.ActionBar</item>
<!-- color for widget theming, eg EditText. Doesn't effect ActionBar. -->
<item name="colorControlNormal">@color/my_awesome_color</item>
<!-- The animated arrow style -->
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
<!-- The style for the widgets on the ActionBar. -->
<item name="actionBarWidgetTheme">@style/WidgetStyle</item>
</style>
<style name="WidgetStyle" parent="style/ThemeOverlay.AppCompat.Light">
<item name="colorControlNormal">@color/my_awesome_color</item>
</style>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-18 04:13:50
Użyj poniższej metody:
private Drawable getColoredArrow() {
Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
Drawable wrapped = DrawableCompat.wrap(arrowDrawable);
if (arrowDrawable != null && wrapped != null) {
// This should avoid tinting all the arrows
arrowDrawable.mutate();
DrawableCompat.setTint(wrapped, Color.GRAY);
}
return wrapped;
}
Teraz możesz ustawić drawable za pomocą:
getSupportActionBar().setHomeAsUpIndicator(getColoredArrow());
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-08 13:37:42
Innym rozwiązaniem, które może zadziałać dla Ciebie, jest nie deklarowanie paska narzędzi jako paska akcji aplikacji ( przez setActionBar
lub setSupportActionBar
) i ustawić ikonę z powrotem w onActivityCreated za pomocą kodu wymienionego w innej odpowiedzi na tej stronie
final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
toolbar.setNavigationIcon(upArrow);
Teraz, nie dostaniesz onOptionItemSelected
oddzwonienie po naciśnięciu przycisku Wstecz. Możesz jednak zarejestrować się w tym celu używając setNavigationOnClickListener
. To właśnie robię:
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getActivity().onBackPressed(); //or whatever you used to do on your onOptionItemSelected's android.R.id.home callback
}
});
Nie jestem pewien, czy to zadziała, jeśli pracujesz z elementami menu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-07 23:24:05
Mieliśmy ten sam problem i chcieliśmy tylko ustawić
Aplikacja: collapseIcon
Atrybut w pasku narzędzi na końcu, którego nie znaleźliśmy, ponieważ nie jest zbyt dobrze udokumentowany:)
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbarHeight"
app:collapseIcon="@drawable/collapseBackIcon" />
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-18 13:19:26
Spróbuj tego
public void enableActionBarHomeButton(AppCompatActivity appCompatActivity, int colorId){
final Drawable upArrow = ContextCompat.getDrawable(appCompatActivity, R.drawable.abc_ic_ab_back_material);
upArrow.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP);
android.support.v7.app.ActionBar mActionBar = appCompatActivity.getSupportActionBar();
mActionBar.setHomeAsUpIndicator(upArrow);
mActionBar.setHomeButtonEnabled(true);
mActionBar.setDisplayHomeAsUpEnabled(true);
}
Wywołanie funkcji:
enableActionBarHomeButton(this, R.color.white);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-24 11:34:43
Możesz programowo zmienić kolor ikony nawigacji w następujący sposób:
mToolbar.setNavigationIcon(getColoredArrow());
private Drawable getColoredArrow() {
Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
Drawable wrapped = DrawableCompat.wrap(arrowDrawable);
if (arrowDrawable != null && wrapped != null) {
// This should avoid tinting all the arrows
arrowDrawable.mutate();
DrawableCompat.setTintList(wrapped, ColorStateList.valueOf(this.getResources().getColor(R.color.your_color)));
}
}
return wrapped;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-28 07:07:38
Po prostu usuń android:homeAsUpIndicator
i homeAsUpIndicator
ze swojego tematu i będzie dobrze. Atrybut color
w Twoim stylu DrawerArrowStyle
musi być wystarczający.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-06 20:37:55
Jeśli chcesz zmienić kolor przycisku strzałki dla wszystkich ikon w szablonie, po prostu Nadpisz domyślny plik w folderze do rysowania. Domyślna nazwa pliku to " abc_ic_ab_back_mtrl_am_alpha.png".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-10 12:00:35
Właśnie zmieniłem motyw paska narzędzi na @style / ThemeOverlay.AppCompat.Światło
I strzała stała się ciemnoszara
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:gravity="center"
app:layout_collapseMode="pin"
app:theme="@style/ThemeOverlay.AppCompat.Light">
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-02 06:26:39
Chyba, że jest lepsze rozwiązanie...
To, co zrobiłem, to zrobienie @drawable/abc_ic_ab_back_mtrl_am_alpha
zdjęć, które wydają się być białe, i pomalowanie ich w pożądany kolor za pomocą edytora zdjęć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-08 19:38:18