AppCompat 工具栏:更改 ActionMode 中的溢出图标颜色
AppCompat Toolbar: Change Overflow Icon Color in ActionMode
使用 AppCompat 工具栏,我希望能够在 ActionMode 更改时更改溢出菜单图标的颜色。
例如,溢出图标在正常工具栏模式下将为白色。并且会在 ActionMode 上变黑。到目前为止,我已经设法更改了动作模式的背景以及标题文本。但是我还没有找到改变溢出菜单图标颜色的方法。
我知道有一个可用的答案:
Change ActionMode Overflow icon
我尝试了第一个解决方案,但找不到溢出图标。
第二种解决方案,即使有 50L 的延迟,也会导致溢出菜单图标闪烁 ActionMode 的预期颜色短暂的瞬间,这非常刺耳。
这可以通过设置 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>
将以下行添加到您的主题属性中:
<item name="android:textColorSecondary">@android:color/white</item>
<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>
要正确更改工具栏溢出菜单图标的颜色,请将工具栏的主题设置为 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>
将此代码添加到您的资源中->styles.xml
<style name="ToolbarColored" parent="AppTheme">
<item name="android:textColorSecondary">YOUR_COLOR</item>
</style>
然后你的 'ToolbarColored' 风格在你的 XML 文件中像 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" />
首先制作你的自定义样式
<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" />
<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>
如果您在 activity xml 中使用工具栏,您可以使用类似这样的东西
toolbar?.navigationIcon?.setColorFilter(ContextCompat.getColor(this, android.R.color.black), PorterDuff.Mode.SRC_ATOP)
如果你想要白色溢出菜单图标只需添加
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"
/>
此外,您应该了解它还会更改菜单项的颜色。
<style name="ToolBarTheme" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="android:tint">@color/colorAccent</item>
使用您的颜色创建以上 theme.set 色调并将此主题添加到工具栏。
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ToolBarTheme"/>
<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>
None 这里的答案帮助我独立于普通工具栏的溢出图标颜色更改了 ActionMode 的溢出图标颜色(无需诉诸代码中的逐个样式)。经过反复试验,我认为我们可以独立于 Toolbar 覆盖 ActionMode 的 theme
属性,并且成功了!
在基本主题中,我们像往常一样指定动作模式的样式:
<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
.
轻松覆盖该颜色
使用 AppCompat 工具栏,我希望能够在 ActionMode 更改时更改溢出菜单图标的颜色。
例如,溢出图标在正常工具栏模式下将为白色。并且会在 ActionMode 上变黑。到目前为止,我已经设法更改了动作模式的背景以及标题文本。但是我还没有找到改变溢出菜单图标颜色的方法。
我知道有一个可用的答案: Change ActionMode Overflow icon
我尝试了第一个解决方案,但找不到溢出图标。
第二种解决方案,即使有 50L 的延迟,也会导致溢出菜单图标闪烁 ActionMode 的预期颜色短暂的瞬间,这非常刺耳。
这可以通过设置 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>
将以下行添加到您的主题属性中:
<item name="android:textColorSecondary">@android:color/white</item>
<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>
要正确更改工具栏溢出菜单图标的颜色,请将工具栏的主题设置为 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>
将此代码添加到您的资源中->styles.xml
<style name="ToolbarColored" parent="AppTheme">
<item name="android:textColorSecondary">YOUR_COLOR</item>
</style>
然后你的 'ToolbarColored' 风格在你的 XML 文件中像 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" />
首先制作你的自定义样式
<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" />
<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>
如果您在 activity xml 中使用工具栏,您可以使用类似这样的东西
toolbar?.navigationIcon?.setColorFilter(ContextCompat.getColor(this, android.R.color.black), PorterDuff.Mode.SRC_ATOP)
如果你想要白色溢出菜单图标只需添加
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"
/>
此外,您应该了解它还会更改菜单项的颜色。
<style name="ToolBarTheme" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="android:tint">@color/colorAccent</item>
使用您的颜色创建以上 theme.set 色调并将此主题添加到工具栏。
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ToolBarTheme"/>
<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>
None 这里的答案帮助我独立于普通工具栏的溢出图标颜色更改了 ActionMode 的溢出图标颜色(无需诉诸代码中的逐个样式)。经过反复试验,我认为我们可以独立于 Toolbar 覆盖 ActionMode 的 theme
属性,并且成功了!
在基本主题中,我们像往常一样指定动作模式的样式:
<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
.