当多选激活时,AppCompat ToolBar popupTheme不使用

时间:2015-05-29 10:00:06

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

在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"/>

多选未激活时弹出主题的外观如何(正确): Displayed correctly

以下是多重选择激活时如何显示(错误): enter image description here

2 个答案:

答案 0 :(得分:0)

您可以尝试使用此属性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/

答案 1 :(得分:0)

它的Menu - ActionMode您看到默认的OptionsMenu popUp背景为白色,而您的应用的默认上下文菜单是黄色的。当您进入多选时,会触发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);
}

希望它有用