android - 使用工具栏时无法设置操作模式样式

标签 android android-support-library material-design

我不确定这是一个错误还是我没有正确使用新的 Toolbar 类。

我能够直接使用可用主题之一成功地为 ActionBar 设置主题。这也允许我为 ActionMode 设置主题。一切都如预期般完美。这就是我的做法。

<style name="Theme.ActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="actionModeBackground">@drawable/action_mode_background</item>
</style>

现在我正在寻找更多的灵 active ,所以我尝试使用支持库中的新工具栏。完善工具栏实现并工作正常,但是,现在操作模式不再按预期工作。自定义背景不起作用,操作模式栏将工具栏向下推。

为了解决下推问题,我使用了标志 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 它将包括窗口操作栏。


更新 2
我能够使用几个 mod 正确地获得 Action 模式主题。

  1. Action 模式背景。原来你只是直接在 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>`
    

最佳答案

好吧,在从支持库中挖掘了一些样式、主题、属性和代码之后,我终于能够正确地设置操作模式的样式。

在我提供我的问题的解决方案之前,我必须提到支持库似乎存在错误。当您隐藏窗口操作栏时,它似乎会丢失操作模式的设置主题。我已经报告了bug看看他们是否解决了这个问题或提供了更多详细信息。

因此,解决方案基本上是我自己设计背景、文本和关闭图标的样式。这样做需要使用我自己的 ActionMode 样式并将属性指针更改为关闭图标。

主题.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 不能用于设置 Action 模式的背景。您必须通过 ActionMode 样式上的标准 android:background 更改背景。
  • 标题文字
    只需为 titleTextStyle 提供通用样式即可更改文本颜色。
  • 关闭图标
    下载 Material 图标并使用 actionModeCloseDrawable 属性自行添加关闭图标。

关于android - 使用工具栏时无法设置操作模式样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28374774/

相关文章:

Android Google Maps OnMapReadyCallback() 未在设备上发生(适用于模拟器)

android - 以编程方式创建的编辑文本的文本输入布局

android - jar 不匹配!修复 android-support-v7-appcompat 中的依赖项

android - 如何动态启用/禁用整个溢出菜单?

dart - 具有不同项目的 Flutter 中的 ListView.builder()

javascript - 粘性标题 md-table-container Angular js Material 设计

android - 在android上启用AP的情况下收听UDP广播

android - 在尝试每种变体后,AudioRecorder 无法初始化

android - 从 Notification Intent 开始时保持 Activity 状态

android - 无法解决:com.android.support:cardview-v7:26.0.0 android