38

使用 AppCompat 工具栏,我希望能够在 ActionMode 更改时更改溢出菜单图标的颜色。

例如,在正常工具栏模式下,溢出图标将是白色的。并且会在 ActionMode 上变黑。到目前为止,我已经设法改变了动作模式的背景以及标题文本。但我还没有找到改变溢出菜单图标颜色的方法。

我知道有一个可用的答案: 更改 ActionMode 溢出图标

我尝试了第一个解决方案,但找不到溢出图标。

第二种解决方案,即使有 50L 的延迟,也会导致溢出菜单图标在很短的瞬间闪烁 ActionMode 的预期颜色,这非常刺耳。

4

12 回答 12

73

将以下行添加到您的主题属性中:

<item name="android:textColorSecondary">@android:color/white</item>
于 2015-06-30T13:06:44.483 回答
17

这可以通过设置android:textColorSecondary主题属性来实现。

例如,假设您有以下使用主题的工具栏MyToolbarStyle

<android.support.v7.widget.Toolbar
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:id="@+id/main_toolbar"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:minHeight="?attr/actionBarSize"
  theme="@style/MyToolbarStyle"
/>

接下来,定义样式MyToolbarStyle,继承自ThemeOverlay.AppCompat.ActionBar。最后,通过添加一个项目来修改溢出图标的颜色android:textColorSecondary

<style name="MyToolbarStyle" parent="ThemeOverlay.AppCompat.ActionBar">
  <item name="android:textColorSecondary">#333333</item>
</style>
于 2015-03-06T03:43:05.063 回答
12
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
     <item name="android:actionOverflowButtonStyle">@style/ActionButton.Overflow.Icon</item>
 </style>

 <style name="ActionButton.Overflow.Icon" parent="android:style/Widget.Holo.Light.ActionButton.Overflow">
     <item name="android:src">@mipmap/yourwanticon</item>
 </style>
于 2016-05-28T05:28:17.753 回答
9
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="android:actionOverflowButtonStyle">@style/ActionButtonOverflow</item>

    <!-- Support library compatibility -->
    <item name="actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
</style>

<style name="ActionButtonOverflow" parent="@style/Widget.AppCompat.ActionButton.Overflow">
    <item name="android:tint">@color/brand_white</item>
</style>
于 2018-05-16T05:30:14.563 回答
5

将此代码添加到您的 res->styles.xml

<style name="ToolbarColored" parent="AppTheme">
<item name="android:textColorSecondary">YOUR_COLOR</item>
</style>

然后你的 XML 文件中的“ToolbarColored”样式就像 belove

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        app:theme="@style/ToolbarColored"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
于 2017-07-14T08:58:19.460 回答
3

要正确更改工具栏溢出菜单图标的颜色,请将工具栏的主题设置为 AppCompat 深色 ActionBar 主题。例如:

在您的 res/values/style.xml 文件中,以这种方式创建一个从 AppCompat 继承的主题:

<style name="AppTheme.MyThemeName" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

现在将工具栏的主题设置为此主题:

<android.support.v7.widget.Toolbar
  android:id="+id/my_toolbar_id
  android:layout_width="match_parent"
  android:layout_height="@dimen/my_toolbar_height"
  android:theme="@style/AppTheme.MyThemeName">

</android.support.v7.widget.Toolbar>
于 2016-12-14T16:33:05.570 回答
3
<style name="ToolBarTheme" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="android:tint">@color/colorAccent</item>

用你的颜色创建上面的 theme.set tint 并将这个主题添加到工具栏。

<androidx.appcompat.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ToolBarTheme"/>
于 2019-05-27T15:23:28.990 回答
3

这里的任何答案都没有帮助我独立于普通工具栏的溢出图标颜色更改 ActionMode 的溢出图标颜色(不诉诸代码中的逐个样式样式)。经过一些试验和错误,我认为我们可以theme独立于 Toolbar 覆盖 ActionMode 的属性,并且成功了!

在基本主题中,我们像往常一样指定动作模式的样式:

<style name="BaseTheme" parent="Theme.MaterialComponents.DayNight.Bridge">
        <item name="actionModeStyle">@style/ActionModeStyle</item>
</style>

在我们的自定义ActionModeStyle中,我们做任何我们想要的样式,并指定一个theme属性:

<style name="ActionModeStyle" parent="@style/Widget.AppCompat.ActionMode">
        <item name="theme">@style/ActionMode.Theme</item>
</style>

<style name="ActionMode.Theme" parent="ThemeOverlay.AppCompat.Dark">
        <item name="android:textColorSecondary">?attr/colorPrimary</item>
</style>

textColorSecondary也会改变后退按钮的颜色,但我们可以使用actionModeCloseButtonStyle.

于 2019-11-09T20:13:13.790 回答
2

首先制作您的自定义样式

 <style name="ToolbarColoredBackArrow" parent="AppTheme">
    <item name="android:textColorSecondary">@color/white</item>
 </style>

然后只需将其添加到您的工具栏中

     <android.support.v7.widget.Toolbar
          android:id="@+id/toolbar"
          android:layout_width="match_parent"
          android:titleTextColor="@color/white"
          app:theme="@style/ToolbarColoredBackArrow"
          android:layout_height="?attr/actionBarSize"
          app:layout_scrollFlags="scroll|enterAlways"
          android:background="?attr/colorPrimary" />
于 2017-09-14T10:40:14.460 回答
2

如果您在活动 xml 中使用工具栏,则可以使用类似这样的东西

toolbar?.navigationIcon?.setColorFilter(ContextCompat.getColor(this, android.R.color.black), PorterDuff.Mode.SRC_ATOP)
于 2018-08-13T13:15:57.810 回答
1

如果您想要白色溢出菜单图标,只需添加 android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"到您的工具栏布局代码。

如果您想要深色溢出菜单图标,请使用 android:theme="@style/Base.Widget.AppCompat.Light.PopupMenu"

所以最终的代码是这样的:

<android.support.v7.widget.Toolbar
        android:id="@+id/a_main_tb"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:background="@color/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:title="@string/app_name"
        app:titleTextColor="#ffffff"
        />

此外,您应该了解它也会改变菜单项的颜色。

于 2019-02-20T10:16:37.943 回答
1
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="actionOverflowButtonStyle">@style/CustomOverflowButtonStyle</item>
</style>
<style name="CustomOverflowButtonStyle" parent="Widget.AppCompat.ActionButton.Overflow">
    <item name="android:tint">@color/black</item>
</style>
于 2019-10-24T11:41:33.010 回答