使用工具栏时无法设置动作模式

时间:2015-02-06 21:04:11

标签: android android-support-library material-design

我不确定这是不是错误,或者我不能正确使用新的工具栏类。

我能够使用其中一个可用主题直接成功操作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>

在我的活动中,我执行以下操作以使我的工具栏成为默认的ActionBar。

Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);

现在我尝试了很多东西。我甚至尝试潜入源头来弄清楚发生了什么。

为什么会发生这种情况?如何设置ActionMode的样式?或者更具体地说,我如何更改ActionMode的背景?


更新1
我注意到,在将<item name="windowActionBar">false</item>添加到我的活动主题时,操作模式会丢失其主题而不是将其设置为true。显然将其设置为true它将包括窗口操作栏。


更新2
我能够使用几个mods正确地获得主题的动作模式。

  1. 动作模式背景。事实证明你只需将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>
    
  2. 后箭头未设置样式。我覆盖了所使用的drawable,只是添加了我自己的白色。

    <item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>`
    

1 个答案:

答案 0 :(得分:16)

嗯,在挖掘了支持库中的一些样式,主题,attrs和代码后,我终于能够正确设置动作模式的样式。

在我提供问题的解决方案之前,我必须提到支持库似乎存在错误。当您隐藏窗口操作栏时,它似乎会松开操作模式的设置主题。我已经报告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 attr。
  • 添加了我自己的关闭图标