4

新しいサポート ツールバーとナビゲーション ドロワーを使用したアクティビティがあります。ツールバーは、アイテムのリストなどのコンテンツに関連しています。複数の項目を選択できます - 次に、ActionMode が表示されます (コンテキスト アクション バー)。ただし、システムの ActionMode の位置、サイズ、およびレイアウトの順序は、適切なツールバーに対応していません。

質問: システムの ActionMode をツールバーに対応する (揃える) ように調整するにはどうすればよいですか? または、他に推奨される代替手段はありますか?以下の私のケースを参照してください

肖像画

NavDrawer は側面 (1-緑) に隠されている可能性があります - これは、ツールバーと ActionMode の両方で問題ありません。ツールバーとそのコンテンツの両方が、開いているナビゲーション ドロワーによって重なっています (2-黄色)。ただ、ActionModeがアクティブの時は常にNavDrawer(3-赤)の上に表示されるのですが、ActionModeは隠しコンテンツに関係するので(2-黄)のようにしたいです。

この問題は次の質問に似ています: Contextual ActionMode Bar を appcompat-v7 Toolbar にオーバーレイするが、ナビゲーション ドロワーにはオーバーレイしないようにする方法は?

アクションモードのポートレート

タブレット/横向き

横向きでは、NavDrawer はツールバーとコンテンツの横に収まります (左)。ActionMode は常に NavDrawer と Toolbar をオーバーレイし、全画面幅 (右赤) です。ここでも、ActionMode を Toolbar と同じ位置 (左の黄色) にしたいと思います。

ActionMode ランドスケープ/タブレット

4

1 に答える 1

2

別のToolbar( actionModeToolbar) を使用して解決しました。これは、レイアウトのどこにでも配置でき、必要に応じて表示または非表示にできます。

ここで使用方法に関するいくつかの役立つヒントを見つけましToolbarた: https://gist.github.com/gabrielemariotti/ae63392e1c70bc33af8b

これが、 with legacyActionModeを使用して作成した方法です。部分的な互換性のために system と同様のメソッドを使用しました。システムが使用されておらず、コードをリファクタリングできるため、これはもう必要ありません。ToolbarActionMode.CallbackActionModeActionMode.CallbackActionMode

class ToolbarActionMode {

    Toolbar actionModeToolbar;
    ActionMode.Callback callback;       

    void startActionMode() {
        actionModeToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                toolbarActionMode.finishActionMode();
            }
        });
        actionModeToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override public boolean onMenuItemClick(MenuItem menuItem) {
                return callback.onActionItemClicked(null, menuItem);
            }
        });
        // will create menu using inflateMenu(R.menu.menu_res)
        callback.onCreateActionMode(null, null);
        invalidate();
        actionModeToolbar.setVisibility(View.VISIBLE);
    }

    void finishActionMode() {
        callback.onDestroyActionMode(null);
        actionModeToolbar.setVisibility(View.GONE);        
    }

    void invalidate() {
        // will update title + menu
        callback.onPrepareActionMode(null, actionModeToolbar.getMenu());
    }

    void setTitle(CharSequence title) {
        actionModeToolbar.setTitle(title);
    }

    void inflateMenu(int menuRes) {
        actionModeToolbar.inflateMenu(menuRes);
    }
}
于 2015-03-07T11:04:15.073 に答える