【问题标题】:Android compatibility contextual action barAndroid 兼容性上下文操作栏
【发布时间】:2012-03-02 18:00:44
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您好,您查看示例源代码了吗,还有添加按钮、上下文按钮等示例github.com/JakeWharton/ActionBarSherlock/tree/master/samples/…
  • 是的,我查看了该文件夹中的类,但没有看到您所说的示例。我看到的唯一添加东西的例子是在 OptionsMenu 创建步骤中完成的,但我希望这样做是为了响应对项目的长按(逻辑上是上下文的事情)。你能具体告诉我你在哪个文件中看到的吗?
  • 这就是我让它工作的方式stackoverflow.com/questions/14737519/…

标签: android actionbarsherlock contextual-action-bar


【解决方案1】:

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

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

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

【讨论】:

  • 哇很好的遮阳篷,已经为此苦苦挣扎了几个小时!伟大的工作
【解决方案2】:

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

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

【讨论】:

  • 据我所知,该命名空间不存在。
  • 您使用的是ActionBarSherlock v4.0 吗?它上周退出了测试版。
  • 升级到 4.0 将添加您缺少的命名空间。
【解决方案3】:

ActionBarSherlock 有自己的 ActionMode 实现,但您必须手动控制其生命周期,我为此写了 tutorial

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 这与我的问题无关。该示例是如何从片段中显示上下文菜单。我正在尝试从更新的 API 复制上下文操作栏。
    【解决方案5】:

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

    【讨论】:

    • 是的,我以前做过,但这使它一直显示在该活动的操作栏上。我要做的是仅在列表中选择项目后显示按钮,并在选择每个项目后更新。
    【解决方案6】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多