自定义'返回'带有appcompat-v7的Actionmode中的箭头颜色

时间:2015-02-05 20:19:32

标签: android android-actionbar-compat

我的主题基于Theme.AppCompat.Light,如下所示:

<style name="core" parent="Theme.AppCompat.Light" >
    <!-- Material, Yo!-->
    <item name="colorPrimary">@color/theme_main_color</item>
    <item name="colorPrimaryDark">@color/deep_purple</item>
    <item name="colorAccent">@color/theme_accent_color</item>
    <item name="android:navigationBarColor" tools:ignore="NewApi">?attr/colorPrimary</item>
    <!-- Toolbar -->
    <item name="theme">@style/my_toolbar_theme</item>
    <item name="drawerArrowStyle">@style/my_drawer_arrow</item>
    <!-- Actionbar -->
    <item name="android:actionBarDivider">@null</item>
    <item name="android:actionBarTabStyle">@null</item>
    <item name="android:actionBarTabBarStyle">@null</item>
    <!-- Contextual Actionbar -->
    <item name="windowActionModeOverlay">true</item>
    <item name="actionModeBackground">?attr/colorAccent</item>
    <item name="actionModeStyle">@style/my_actionmode_style</item>
</style>

<style name="my_drawer_arrow" parent="Widget.AppCompat.DrawerArrowToggle" >
    <item name="spinBars">true</item>
    <item name="color">@color/theme_accent_color</item>
</style>

<style name="my_toolbar_style">
    <item name="android:id">@id/toolbar</item>
    <item name="android:minHeight">?attr/actionBarSize</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:background">?attr/colorPrimary</item>
    <item name="android:elevation" tools:ignore="NewApi">5dp</item>
</style>

<style name="my_actionmode_style" parent="Widget.AppCompat.Light.ActionMode.Inverse" >
    <item name="titleTextStyle">@style/my_actionmode_title_style</item>
    <item name="subtitleTextStyle">@style/my_actionmode_subtitle_style</item>
</style>

<style name="my_toolbar_style.gradient">
    <item name="android:background">@drawable/ab_gradient_bg</item>
</style>

<style name="my_toolbar_theme" parent="ThemeOverlay.AppCompat.Dark.ActionBar" >
    <!-- Customize the toolbar here -->
</style>

<style name="my_actionmode_title_style" parent="TextAppearance.AppCompat.Widget.ActionMode.Title">
    <item name="android:textColor">@color/std_white</item>
</style>

<style name="my_actionmode_subtitle_style" parent="TextAppearance.AppCompat.Widget.ActionMode.Subtitle">
    <item name="android:textColor">@android:color/white</item>
</style>

actionmode 中,我希望看到带有白色后箭头的白色标题/副标题。我已经能够将标题和副标题文本颜色设置为白色,但后面的箭头仍然是黑色。此问题仅发生在我使用SupportActionbar而非工具栏的位置(工具栏中的后退箭头为白色)。

这是我在ActionMode中的工具栏。

This is my toolbar in ActionMode

这是ActionMode中的操作栏。相同的手机,相同的应用程序,相同的主题,只是一个不同的活动。

This is the actionbar in ActionMode

我在主题中找不到任何可以确定此颜色的内容。根据消息来源,图标为@drawable/abc_ic_ab_back_mtrl_am_alpha,为白色,因此必须对其进行着色。这种黑色的颜色来自哪里?

4 个答案:

答案 0 :(得分:32)

使用AppCompat进行自定义:

在您的应用级主题中:

<style name="MyTheme" parent="Theme.AppCompat.Light">
    <item name="actionModeCloseDrawable">@drawable/ic_actionbar_back</item>
    <item name="actionModeCloseButtonStyle">@style/myclosebutton</item>
</style>

在CloseButtonStyle中:

<style name="myclosebutton" parent="Widget.AppCompat.Light.ActionButton.CloseMode">
    <item name="android:tint">#ff0</item> <!-- whatever color -->
</style> 

答案 1 :(得分:6)

我遇到了同样的问题,我通过明确声明我想在样式中使用的图标来解决它:

<item name="android:actionModeCloseDrawable">@drawable/ab_back</item>

我提供@ drawable / ab_back。

这并不理想,因为我想正确设置样式并让它继承父主题中正确的颜色,而不需要声明如此具体的细节。但是,我觉得 ActionBar,SupportActionBar,SherlockActionBar,ActionBarActivity,FragmentActivityWithASherlockSupportActionToolbar 周围的一切都被打破了,并且设计糟糕,我很乐意通过解决方法来解决它。

答案 2 :(得分:0)

尝试使用“colorControlNormal”属性,如下面的“NoActionBar主题”

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="colorControlNormal">@android:color/white</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

答案 3 :(得分:-1)

我有最好的答案

 Spannable text = new SpannableString( mode.getTitle());
                    text.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.colorPrimaryDark)),
                            0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                    mode.setTitle(text);