7

在我的应用程序中,我正在使用官方文档中解释的工具栏(v7 appcompat 支持库, :http Theme.Appcompat.Light.NoActionBar, android.support.v7.widget.Toolbar, setSupportActionBar(myToolbar)): //developer.android.com/training/appbar/index.html

当我长按一个项目时,我有一个ExpandableListView并且我想实现上下文操作模式。为了实现这一点,我使用: setMultiChoiceModeListener(new MultiChoiceModeListener()). 但是这样一来,动作模式栏显示在屏幕的顶部,向下推了工具栏(我认为是因为系统使用的是普通动作模式,而不是支持动作模式)。我希望它显示在工具栏上。

我试过这个解决方案:

windowActionBarOverlay = true

但它不起作用。

4

3 回答 3

4

我也有这个问题。
您尝试的解决方案有点不对劲。

而不是<item name="windowActionBarOverlay">true</item>

尝试<item name="windowActionModeOverlay">true</item>

在您的应用程序的主题中设置。这将根据需要将操作模式栏覆盖在工具栏上。

于 2020-07-08T04:36:53.373 回答
0

这对我有用...如果您使用的是自定义工具栏,那么不要使用 android:theme="@style/Theme.Design.NoActionBar"try从清单中删除默认工具栏

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">  
   <item name="windowActionBarOverlay">true</item>
 </style> 

在样式中并从清单文件中删除该代码。

于 2022-02-09T14:21:26.820 回答
0

您可以在适配器中使用此代码

 public boolean multiSelect = false;
private ArrayList<String> selectedItems = new ArrayList<>();
ActionMode modee;
private ActionMode.Callback actionModeCallbacks = new ActionMode.Callback() {
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        multiSelect = true;
        menu.add("Delete");
        modee=mode;
        return true;
    }

    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        for (int i = 0; i < selectedItems.size(); i++) {
            for (int j = 0; j < sizeOfdata; j++) {
                if (data.get(j).getFull_name() == selectedItems.get(i)) {
                    data.remove(j);
                    deleteContact(selectedItems.get(i));
                     //or your code 
                    break;
                } else {
                    // continue;
                }
            }
        }
        mode.finish();
        return true;
    }

    @Override
    public void onDestroyActionMode(ActionMode mode) {
        multiSelect = false;
        selectedItems.clear();
        notifyDataSetChanged();
    }
};
于 2019-01-21T14:37:33.047 回答