[java] 새로운 머티리얼 테마에서 뒤로 화살표의 색을 바꾸는 방법은 무엇입니까?

SDK를 API 21로 업데이트했으며 이제 뒤로 / 위로 아이콘이 왼쪽을 가리키는 검은 색 화살표입니다.

검은 뒤로 화살표

회색으로 표시하고 싶습니다. 어떻게해야합니까?

예를 들어 Play 스토어에서 화살표는 흰색입니다.

스타일을 설정하기 위해이 작업을 수행했습니다. 에 사용 @drawable/abc_ic_ab_back_mtrl_am_alpha했습니다 homeAsUpIndicator. 드로어 블은 투명하지만 (알파 만) 화살표는 검은 색으로 표시됩니다. 에서처럼 색상을 설정할 수 있는지 궁금합니다 DrawerArrowStyle. 또는 유일한 해결책은 my를 만들어서 @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.



답변

코드를 통해 달성 할 수 있습니다. 뒤로 화살표 드로어 블을 가져 와서 필터로 색상을 수정 한 후 뒤로 버튼으로 설정하십시오.

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 :

API 23 (Marshmallow)부터 드로어 블 리소스 abc_ic_ab_back_mtrl_am_alpha가로 변경되었습니다 abc_ic_ab_back_material.

편집하다:

이 코드를 사용하여 원하는 결과를 얻을 수 있습니다.

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


답변

ToolbarTintManager소스를 보면 drawable/abc_ic_ab_back_mtrl_am_alphastyle 속성 값으로 표시 colorControlNormal됩니다.

내 프로젝트에서 ( <item name="colorControlNormal">@color/my_awesome_color</item>내 테마로) 이 설정을 시도 했지만 여전히 검은 색입니다.

업데이트 :

그것을 발견. 당신은 설정해야합니다 actionBarTheme속성 ( 없는 actionBarStyle 과를) colorControlNormal.

예 :

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


답변

위의 모든 제안을 시도했습니다. 툴바의 탐색 아이콘 기본 뒤로 버튼 화살표 색상을 변경하는 유일한 방법은 기본 테마에서 이와 같이 colorControlNormal을 설정하는 것입니다. 부모가 Theme.AppCompat.Light.NoActionBar를 사용하고 있기 때문일 수 있습니다.

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item>
  //the rest of your codes...
</style>


답변

툴바 테마에 단일 속성을 추가해야합니다.

<style name="toolbar_theme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="colorControlNormal">@color/arrow_color</item>
</style>

이 toolbar_theme를 툴바에 적용하십시오.

또는

테마에 직접 적용 할 수 있습니다.

<style name="CustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/arrow_color</item>
  //your code ....
</style>


답변

그냥 추가

<item name="colorControlNormal">@color/white</item> 

현재 앱 테마로


답변

사용 Toolbar하면 이것을 시도 할 수 있습니다

Drawable drawable = toolbar.getNavigationIcon();
drawable.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP);


답변

대부분의 이전 의견에서 언급했듯이 해결책은

<item name="colorControlNormal">@color/white</item>
앱 테마로 그러나 레이아웃의 툴바 요소에 다른 테마가 정의되어 있지 않은지 확인하십시오.

     <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" />