android - 动作模式下工具栏不会消失
问题描述
我正在尝试实现一个功能,当我长按一个列表项时,动作模式将启动,并且可以删除一个或多个项目。
我开始搜索,它以 ListView 及其项目DocumentsActivity
开始一个片段。DocumentsFragment
ListAdapter 通过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();
}
}
解决方案
正如评论中提供的链接所指出的,您只需在您的 AppTheme 样式中添加以下行:
<item name="windowActionModeOverlay">true</item>
它只是表明动作模式应该覆盖窗口内容而不是向下推,它告诉你不需要为动作模式保留任何空间。
推荐阅读
- python - 遍历 Jinja2 模板中的字典列表
- javascript - 服务器响应显示在页面中,无法在客户端处理
- blender - Blender 2.79 材料导出到 gltf 失去光泽
- flutter - Flutter中的主题覆盖不起作用,使用官方示例
- vue.js - 如何将抽屉图标和标题移动到工具栏的左侧
- jsf - 如何正确使用@NotNull 注解?
- visual-studio - 面向 .NET Core 2.2 的 Azure 函数
- powershell - 如果 *.tmp 存在于其中的任何位置,如何不对目录进行操作?
- terraform - Terraform:如果子网不存在,则将 interface 设置为 null
- c++ - 所有类型的 STL 容器的通用排序