android - 如何将上下文操作栏添加到对话框

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

我遇到过几种情况,其中 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/

相关文章:

android - 调用 loadAd(request) 的频率是多少?

android - 以编程方式打开特定的设置页面

java - 具有自定义布局的 AlertDialog 未显示

android - 如何检查是否显示对话框或显示多个相同类型的对话框?

android - FragmentActivity里面的"setSupportActionBar(toolbar)"?

android - 在 ListView 适配器中更改 getView(...) 中的 TextView 颜色和文本

java - 安卓 : How to turn flashlight on/off programmly using Camera Source Builder?

android - 多个 fragment 在同一个空间?

c# - 弹出对话框不显示详细信息

Android CollapsingToolbarLayout 与自定义 View