我遇到过几种情况,其中 DialogFragment 中的 GridView 需要上下文菜单。我的项目支持 API 8+,所以我使用的是 appcompat 支持库。到目前为止,我已经尝试调用 Activity.startSupportActionMode()在底层 ActionBarActivity 上,但这实际上启动了对话框下方的上下文 ActionBar/ActionMode。我正在寻找一种替代 using an Activity themed as a dialog 的常见但棘手(和高开销)方法的方法.
最佳答案
在框架和 appcompat 支持库的源代码中寻找,我们得到:
对于 API 11+ 标准框架:
Dialog dialog;
ActionMode.Callback actionMode;
Window window = dialog.getWindow();
View toplevel = window.getDecorView();
if (toplevel == null) { return; }
toplevel.startActionMode (actionMode);
对于 appcompat 支持库:
Window window = dialog.getWindow();
View toplevel = window.getDecorView();
if (toplevel == null) { return; }
android.view.ActionMode.Callback frameworkActionMode =
new CallbackWrapper (context, supportActionMode);
toplevel.startActionMode (frameworkActionMode);
请注意,如果您使用的是 DialogFragment,则需要引用 getDialog(), which may be null ,具体取决于您在 DialogFragment 生命周期中的位置。
自修订版 19.1.0(2014 年 3 月)起,appcompat 支持库包含一个内部类 ( android.support.v7.internal.view.ActionModeWrapper.CallbackWrapper ),可用于将支持库 ActionMode.Callback 包装在框架回调中。但是,如果您不想依赖内部类,则可以轻松推出自己的包装器。
关于android - 如何将上下文操作栏添加到对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23945299/