首页 > 解决方案 > 动作模式下工具栏不会消失

问题描述

我正在尝试实现一个功能,当我长按一个列表项时,动作模式将启动,并且可以删除一个或多个项目。
我开始搜索,它以 ListView 及其项目DocumentsActivity开始一个片段。DocumentsFragmentListAdapter 通过setListAdapter(this.documentsAdapter)Fragment 的 onCreate 中的方法调用进行初始化和设置。onActivityCreated我在片段中的列表视图上设置了各种侦听器:

public void onActivityCreated(Bundle savedInstanceState) {

    getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
    getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            getListView().setItemChecked(position, true);
            return true; 
    }});
    getListView().setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            menu.clear();
            ((DocumentsActivity)getActivity()).getMenuInflater().inflate(R.menu.documents_context_menu, menu);
            return true;
        }
    });
    super.onActivityCreated(savedInstanceState);
}

当长按列表项时,动作模式开始,菜单documents_context_menu似乎是动作栏。但问题是,操作栏出现在工具栏上方,工具栏不会消失(见图)。

我尝试将其调用getSupportActionBar().hide()或设置为 null 甚至使用其他样式/主题。这一切都没有奏效。有时蓝色工具栏完全是白色的,但仅此而已。

我完全不知道为什么工具栏不会消失。你能给点建议吗?

提前致谢!

_____ 更新 1 _____

这是styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:fitsSystemWindows">true</item>
    <item name="colorAccent">@color/darkblue100</item>
    <item name="android:actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
    <item name="actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
    <item name="android:actionMenuTextColor">@color/black</item>
</style>

这就是在 Activity 中设置操作栏的方式:

protected void onCreate(Bundle savedInstanceState) {
    handleIntent(getIntent());
    requestWindowFeature(5);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_documents);
    Toolbar mToolbar = (Toolbar) findViewById(R.id.tool_bar);
    setSupportActionBar(mToolbar);
    args = getIntent().getExtras();
    if (findViewById(R.id.container_documents) != null && savedInstanceState == null) {
        showDocumentsFragment();
    }
}

标签: androidandroid-layoutandroid-toolbar

解决方案


正如评论中提供的链接所指出的,您只需在您的 AppTheme 样式中添加以下行:

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

它只是表明动作模式应该覆盖窗口内容而不是向下推,它告诉你不需要为动作模式保留任何空间。


推荐阅读