【问题标题】:AppCompat ToolBar popupTheme not used when multi selection active多选活动时不使用 AppCompat ToolBar popupTheme
【发布时间】:2015-05-29 10:00:06
【问题描述】:

在 styles.xml 中,我正在设置工具栏中溢出菜单的弹出主题样式:

<style name="ToolbarOverflowMenuStyle" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:backgroundTint">@color/white</item>
</style>

按预期工作,但如果我在回收站视图(列表)中进行多项选择,弹出主题背景颜色会从白色变为黄色(工具栏的颜色)。我不知道为什么会这样,因为如果多选未激活,它具有正确的颜色。

任何想法我做错了什么?

工具栏的样式:

<style name="PostToolbarStyle" parent="android:Theme.Material">
    <item name="android:backgroundTint">@color/yellow</item>
    <item name="android:textColorHint">@color/lightGray2</item>
    <item name="android:textColorPrimary">@color/defaultTextColor</item>
    <item name="android:textColorSecondary">@color/defaultTextColor</item>
</style>

这就是我在布局 xml 文件中设置工具栏的方式:

<android.support.v7.widget.Toolbar
    android:id="@+id/app_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    android:minHeight="?attr/actionBarSize"
    android:paddingTop="@dimen/tool_bar_top_padding"
    app:popupTheme="@style/ToolbarOverflowMenuStyle"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar"/>

当多选未激活时,弹出主题的外观(正确):

当多选处于活动状态时,这里是如何(错误地)显示的:

【问题讨论】:

  • 可能偏离主题:不要主题 中使用 backgroundbackgroundTint,因为它们将应用于小部件的每个子项(每个项目而不是总背景)。定义popupBackgroundcolorBackground
  • 感谢您的提示。我已将这些更改应用到应用程序。

标签: android android-layout android-appcompat android-toolbar


【解决方案1】:

它的Menu -ActionMode 你会看到你的默认OptionsMenu 弹出背景是白色的,你的应用程序的默认上下文菜单是黄色的。当你进入多选时,会触发一个 ActionMode 来处理 itemClick 和你有什么,因为你知道 CAB 是如何工作的。

如果您想在 setMultiChoiceModeListener 中保持相同的白色背景,请覆盖 onPrepareActionMode(ActionMode mode, Menu menu) 并使用 getCustomView().setBackgroundColor(Color.White);

编辑处理评论

这就是我在你的onPrePareActionMode() 中的意思

@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
    //the mode parameter is your CAB, so call that on it
    mode.getCustomView().setBackgroundColor(Color.White);
}

希望对你有帮助

【讨论】:

  • 感谢您的提示。我试图应用它,但还没有让它发挥作用。我有 code 私有类 ItemMultiSelectorCallback 实现 ActionMode.Callback { @Override public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { code
  • 抱歉,我只能添加另一条评论,因为我只能编辑 5 分钟的评论:感谢您的提示。我试图应用它,但还没有让它发挥作用。我有这个代码:code private class ItemMultiSelectorCallback implements ActionMode.Callback { @Override public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { MenuItem moveMenuItem = menu.findItem(R.id.action_move_multi_documents); moveMenuItem.setVisible(!isFolderInSelection && !isDraftFolder);返回真; } code 不能在其中的任何地方使用 getCustomView() 方法。有什么想法吗?
【解决方案2】:

你能试着用这个属性来编辑你的风格吗,selectableItemBackground

  <style name="ToolbarOverflowMenuStyle" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:backgroundTint">@color/white</item>
<item name="selectableItemBackground">?android:selectableItemBackground</item></style>

与 SwitchCompat 有类似的问题,解决方案是在其中一个属性中。这个博客也有很大帮助。 http://blog.mohitkanwal.com/blog/2015/03/07/styling-material-toolbar-in-android/

【讨论】:

  • 感谢您的提示。不幸的是,这对 popupTheme 工具栏颜色没有任何影响。似乎弹出工具栏(多选活动时)使用与常规工具栏样式相同的样式设置。
猜你喜欢
  • 2014-12-17
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2015-08-26
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多