使用工具栏时无法设置操作模式样式
Unable to style action mode when using Toolbar
我不确定这是错误还是我没有正确使用新工具栏 class。
我能够直接使用可用主题之一成功地为 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 主题时,动作模式会失去其主题而不是将其设为 true。显然将其设置为 true 它将包括 window 操作栏。
更新 2
我能够使用几个模组正确地获得动作模式主题。
动作模式背景。原来你直接在ActionMode主题上设置背景为android:background!此外,您需要在主题上指定文本。
<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>
后退箭头未设置样式。我覆盖了使用的 drawable 并添加了我自己的白色。
<item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>`
好吧,在从支持库中挖掘了一些样式、主题、属性和代码后,我终于能够正确设置操作模式的样式。
在我提供问题的解决方案之前,我必须提到支持库似乎存在错误。当您隐藏 window 操作栏时,它似乎失去了操作模式的设置主题。我已报告 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 提供通用样式即可更改文本颜色。
- 关闭图标
下载材料图标并使用 actionModeCloseDrawable
属性添加我自己的关闭图标。
我不确定这是错误还是我没有正确使用新工具栏 class。
我能够直接使用可用主题之一成功地为 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 主题时,动作模式会失去其主题而不是将其设为 true。显然将其设置为 true 它将包括 window 操作栏。
更新 2
我能够使用几个模组正确地获得动作模式主题。
动作模式背景。原来你直接在ActionMode主题上设置背景为android:background!此外,您需要在主题上指定文本。
<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>
后退箭头未设置样式。我覆盖了使用的 drawable 并添加了我自己的白色。
<item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>`
好吧,在从支持库中挖掘了一些样式、主题、属性和代码后,我终于能够正确设置操作模式的样式。
在我提供问题的解决方案之前,我必须提到支持库似乎存在错误。当您隐藏 window 操作栏时,它似乎失去了操作模式的设置主题。我已报告 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 提供通用样式即可更改文本颜色。 - 关闭图标
下载材料图标并使用actionModeCloseDrawable
属性添加我自己的关闭图标。