如何在新的材质主题中改变后箭头的颜色?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (57)

将我的SDK更新为API 21,现在Backup图标是指向左侧的黑色箭头。

我希望它是灰色的。我该怎么做?

例如,在Play Store中,箭头是白色的。

我这么做是为了设定一些风格。我用过@drawable/abc_ic_ab_back_mtrl_am_alphahomeAsUpIndicator...。该绘图是透明的(仅为alpha),但箭头以黑色显示。我想知道我是否可以像在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...

提问于
用户回答回答于

你可以通过代码实现它。获取可绘制的后箭头,使用过滤器修改其颜色,并将其设置为后退按钮。

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(Marshmlow)开始,可绘制资源abc_ic_ab_back_mtrl_am_alpha改为abc_ic_ab_back_material...

用户回答回答于

看着ToolbarTintManager来源,drawable/abc_ic_ab_back_mtrl_am_alpha是用样式属性的值着色的。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>

扫码关注云+社区