Android兼容性上下文操作栏

时间:2012-03-02 18:00:44

标签: android actionbarsherlock contextual-action-bar

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

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

设计指南建议使用Contextual Action Bar,这听起来就像我想到的那样。问题是,我正在努力保持与API 7的兼容性(由于我的手机目前是2.3.3)。

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

6 个答案:

答案 0 :(得分:22)

这是一个迟到的答案,但我认为会帮助人们坚持下去。

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

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" />

答案 1 :(得分:16)

设置上下文操作栏与设置“常规”ActionBar项目相同,就XML而言。 This example in the developer's guide explains it all

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

答案 2 :(得分:2)

ActionBarSherlock有自己的ActionMode实现,但你必须手动控制它的生命周期,我写了tutorial这个。

答案 3 :(得分:1)

如需长按点样本,请参阅以下链接。第一个是样本所需的java代码。第二个是如何定义布局;

答案 4 :(得分:0)

我将回答你问题的第二部分。以下是如何使用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);
}

答案 5 :(得分:0)

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

编辑: /samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.java

下的Sherlock示例也有一个例子