我不确定这是否是错误或不正确使用新的工具栏类。
我能够直接使用可用的主题之一成功为ActionBar设置主题。这也使我可以将ActionMode设置为主题。一切都按预期完成。这就是我的做法。
<style name="Theme.ActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="actionModeBackground">@drawable/action_mode_background</item>
</style>
现在,我正在寻找更多的灵活性,因此我尝试使用支持库中的新工具栏。完善工具栏的实现,使其工作正常,但是,现在操作模式不再按预期工作。自定义背景无法正常工作,并且操作模式栏正在向下推工具栏。
为了解决下推问题,我使用了标记
windowActionModeOverlay
。<style name="Theme.ActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@drawable/action_mode_background</item>
</style>
在我的 Activity 中,执行以下操作以使我的工具栏成为默认的ActionBar。
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
现在,我已经尝试了很多事情。我什至尝试深入研究源代码来弄清楚发生了什么。
任何想法为什么会这样?如何设置ActionMode的样式?或更具体地说,如何更改ActionMode的背景?
更新1
我注意到,当将
<item name="windowActionBar">false</item>
添加到我的 Activity 主题中时, Action 模式会放宽其主题,而不是将其设置为true。显然,将其设置为true会包括窗口操作栏。更新2
我能够使用几个mod正确设置主题的 Action 模式。
<item name="actionModeStyle">@style/Widget.ActionMode</item>`
<style name="Widget.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="android:background">@drawable/action_mode_background</item>
<item name="titleTextStyle">@style/TitleTextStyle</item>
</style>
<item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>`
最佳答案
好了,我从支持库中挖掘了一些样式,主题,属性和代码后,终于能够正确设置 Action 模式的样式。
在提供我的问题的解决方案之前,我必须提到支持库似乎存在错误。隐藏窗口 Action 栏时,似乎失去了 Action 模式的设置主题。我已经报告了bug,以查看他们是否解决了此问题或提供了更多详细信息。
因此,解决方案是本质上为我自己设置背景,文本和关闭图标的样式。为此,请使用我自己的ActionMode样式,并将属性指针更改为关闭图标。
themes.xml
<style name="Theme.Main.Home">
<item name="windowActionModeOverlay">true</item>
<item name="actionModeStyle">@style/Widget.ActionMode</item>
<item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>
</style>
styles.xml
<style name="Widget.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="android:background">@drawable/action_mode_background</item>
<item name="titleTextStyle">@style/TitleTextStyle</item>
</style>
这很棘手,因为
actionModeBackground
不能用于设置操作模式的背景。您必须通过ActionMode样式上的标准android:background
更改背景。 只需为titleTextStyle提供通用样式即可更改文本颜色。
下载了 Material 图标,并使用
actionModeCloseDrawable
attr添加了关闭图标。