如何向对话框添加上下文操作栏

时间:2014-05-30 00:39:22

标签: android dialog android-support-library contextual-action-bar

我有几种情况,DialogFragment中的GridView需要一个上下文菜单。我的项目支持API 8+,因此我使用appcompat支持库。到目前为止,我已尝试在底层ActionBarActivity上调用Activity.startSupportActionMode(),但这实际上启动了对话框下的Contextual ActionBar / ActionMode 。我正在寻找替代using an Activity themed as a dialog的常见但又高效(高开销)的方法。

1 个答案:

答案 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。但是如果你不想依赖内部类,你可以轻松地推出自己的包装器。