1. ホーム

[解決済み】新しい素材テーマで戻る矢印の色を変更する方法は?

2022-04-18 21:55:14

質問

SDKをAPI21にアップデートしたところ、バックアップ/アップのアイコンが左向きの黒い矢印になってしまいました。

グレーにしたいのですが。どうしたらいいでしょうか?

例えば、Playストアでは、矢印は白色です。

いくつかのスタイルを設定するために、このようなことをしました。私は @drawable/abc_ic_ab_back_mtrl_am_alpha に対して homeAsUpIndicator . そのdrawableは透明(アルファのみ)ですが、矢印は黒で表示されています。のように色を設定できるのでしょうか? DrawerArrowStyle . または、唯一の解決策は、私の @drawable/grey_arrow に使用し、それを 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>

今までの私の解決策は @drawable/abc_ic_ab_back_mtrl_am_alpha をフォトエディターで好きな色に塗りました。これはうまくいっています。 @color/actionbar_text のように DrawerArrowStyle .

解決方法は?

コードで実現することができます。back arrow drawable を取得し、その色をフィルターで変更し、back button として設定します。

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);

リビジョン1です。

API23(Marshmallow)より、描画可能なリソースである abc_ic_ab_back_mtrl_am_alpha に変更されます。 abc_ic_ab_back_material .

EDITです。

このコードを使用すると、望む結果を得ることができます。

toolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.blue_gray_15), PorterDuff.Mode.SRC_ATOP);