繁体   English   中英

Android 兼容性上下文操作栏

[英]Android compatibility contextual action bar

在尝试遵循 Android 设计指南时,我遇到了一个小难题。

我想要一个可以长按几个(多选)的项目列表,然后对它们执行批量操作。

设计指南建议为此使用上下文操作栏,这听起来完全符合我的想法。 问题是,我试图保持向后兼容 API 7(由于我的手机目前是 2.3.3)。

我正在使用ActionBarSherlock来获取其他操作栏的内容,但我似乎无法弄清楚如何让它启动上下文操作栏,也没有弄清楚如何在 ABS 中任意向 ActionBar 添加按钮。 我看到你可以做标签,所以也许这就是答案,但由于我试图允许多选,我不想拥有正常的模式上下文菜单。

这是一个迟到的答案,但我认为会帮助人们陷入困境。

打开上下文操作栏实际上非常简单,在您的活动中的任何时候您只需调用:

startActionMode(mActionModeCallback);

如果您不在主要活动中,例如在片段中,则可以通过以下方式获得参考

getSherlockActivity().startActionMode(mActionModeCallback);

这是回调

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback(){

    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
          MenuInflater inflater = mode.getMenuInflater();
          inflater.inflate(R.menu.actionbar_context_menu, menu);
          return true;
        }

    @Override
    public void onDestroyActionMode(ActionMode mode) {

    }

    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_item1:
                return true;
            case R.id.menu_item2:
                //close the action mode
                //mode.finish();
                return true;
            default:
                mode.finish();
                return false;
       }
    }
};

xml 是一个简单的菜单,就像操作栏一样:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/menu_item1"
      android:icon="@drawable/ic_item1"
      android:title="@string/ITEM1"
      android:showAsAction="always|withText" />

<item android:id="@+id/menu_item2"
      android:icon="@drawable/ic_item2"
      android:title="@string/ITEM2"
      android:showAsAction="always|withText" />

就 XML 而言,设置上下文操作栏与设置“常规”操作栏项目相同。 开发者指南中的这个例子说明了一切

为了使用 ActionBarSherlock,请将默认的 Android 回调替换为 ActionBarSherlock 编辑的回调(例如,使用com.actionbarsherlock.view.ActionMode代替Android.View.ActionMode )。

ActionBarSherlock 有自己的 ActionMode 实现,但是你必须手动控制它的生命周期,我写了一个关于这个的教程

长按示例请参考以下链接。 第一个是示例所需的 java 代码。 第二个是如何定义布局;

我将回答你问题的第二部分。 这是一个如何使用 ActionBarSherlock 库添加任何 View 实例(下面代码中的按钮)操作栏的示例:

@Override
public boolean onCreateOptionsMenu(Menu menu) {

        refreshButton = (RotatingButton) LayoutInflater.from(this).inflate(R.layout.actionbar_customview_refresh, null);
        refreshButton.setOnClickListener(refreshButtonListener);

        MenuItem item = menu.add(0, android.R.id.copy, 0, getString(R.string.actionbar_refresh));
        item.setActionView(refreshButton);
        item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_activity_action_bar, menu);
}

我面临着同样的问题。 当我找到这个链接时,它就解决了。 基本上,您必须创建一个实现ActionMode.Callback的回调类。 在本课程中,您将使用上下文操作栏为操作栏充气。 在每次选择(或长按)时,您使用startActionMode方法启动回调。 请参阅链接以获取工作代码=]

编辑:/samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.java下还有一个关于 Sherlock 样本的示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM