我有几种情况,DialogFragment中的GridView需要一个上下文菜单。我的项目支持API 8+,因此我使用appcompat支持库。到目前为止,我已尝试在底层ActionBarActivity上调用Activity.startSupportActionMode(),但这实际上启动了对话框下的Contextual ActionBar / ActionMode 。我正在寻找替代using an Activity themed as a dialog的常见但又高效(高开销)的方法。
答案 0 :(得分:2)
在框架和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),可用于在框架Callback中包装支持库ActionMode.Callback。但是如果你不想依赖内部类,你可以轻松地推出自己的包装器。