簡體   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