web-dev-qa-db-ja.com

Android互換性のあるコンテキストアクションバー

Android設計ガイドラインに準拠するために、私は小さな問題にぶつかっています。

複数のアイテムを長押し(複数選択)して、それらに対して一括アクションを実行できるアイテムのリストが欲しい。

設計ガイドラインでは、このためにコンテキストアクションバーを使用することをお勧めしています。問題は、API 7との互換性を維持しようとしていることです(私の電話は現在2.3.3であるため)。

ActionBarSherlockを使用して他のアクションバーのものを取得していますが、コンテキストアクションバーを起動する方法も、ボタンを任意に追加する方法もわからないようです。 ABSのActionBarに。タブを実行できるので、それが答えかもしれませんが、複数選択を許可しようとしているので、通常のモーダルコンテキストメニューは使いたくありません。

25
Paul

コンテキストアクションバーの設定は、XMLに関する限り、「通常の」ActionBarアイテムの設定と同じです。 開発者ガイドのこの例では、すべてを説明しています

ActionBarSherlockを使用するには、デフォルトのAndroidコールバックをActionBarSherlockで編集されたコールバックに置き換えます(例:Android.View.ActionMode、 使用する com.actionbarsherlock.view.ActionMode)。

16
Reinier

これは遅い答えですが、人々が行き詰まるのを助けると思います。

コンテキストアクションバーを開くのは実際には非常に簡単で、アクティビティのどの時点でも呼び出すだけです。

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

ActionBarSherlockには独自のActionModeの実装がありますが、そのライフサイクルを手動で制御する必要があります。これについて tutorial と書きました。

2
orto gonaliy

長いクリックのサンプルについては、以下のリンクを参照してください。 1つ目はJavaサンプルに必要なコードです。2つ目はレイアウトの定義方法です。

1
burak altundal

私は同じ問題に直面していました。 このリンク を見つけたときに解決しました。基本的に、ActionMode.Callbackを実装するコールバッククラスを作成する必要があります。このクラスでは、コンテキストアクションバーでアクションバーを膨らませます。選択(または長押し)ごとに、startActionModeメソッドを使用してコールバックを開始します。動作するコードのリンクを参照してください=]

EDIT:/samples/demos/src/com/actionbarsherlock/sample/demos/ActionModes.Javaの下にSherlockのサンプルの例もあります

0
Alesqui

私はあなたの質問の第二部に答えます。以下は、ActionBarSherlockライブラリを使用してビューインスタンス(以下のコードのボタン)アクションバーを追加する方法の例です。

@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);
}
0
Roman Minenok