web-dev-qa-db-ja.com

AppCompat-V-21ツールバーウィジェットを使用してNavigationDrawerアイコンの右側を設定します

AppCompact-V21で提供されている最新のツールバーウィジェットとナビゲーションドロワーを使用して、マテリアルデザインに取り組んでいます。

私の懸念はナビゲーションドロワーアイコンをツールバーの右側に設定するにはどうすればよいですかAndroid:layout_gravity="right"を設定することでナビゲーションドロワーを右から開くことができますが、ナビゲーションアイコンはツールバーの左側に表示されます。

古いAction Barを使用する場合、右側にカスタムドロワーアイコンが付いたボタン付きのカスタムアクションバーを作成し、カスタムナビゲーションドロワーアイコンをクリックすると、ドロワーを開閉できます。

  1. ツールバーを使用して右側にナビゲーションドロワーアイコンを設定する方法は何ですか?
  2. そのためのカスタムビューを作成する方法は?
12
Dory

ツールバーをカスタマイズして独自のナビゲーションボタンを設定するには、ツールバーに独自の画像ボタンを追加します。

_<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/toolbar"
    Android:minHeight="?attr/actionBarSize"
    Android:layout_height="?attr/actionBarSize"
    Android:layout_width="match_parent" >

    <ImageButton
       Android:layout_width="wrap_content"
       Android:layout_height="wrap_content"
       Android:layout_gravity="end"
       Android:onClick="backButtonHandler"
       Android:background="@drawable/ic_launcher" />

</Android.support.v7.widget.Toolbar>
_

次に、アクティビティクラスでbackButtonHandler(View v)を定義し、必要に応じて機能を追加できます。

9
Abhinav Puri

ActionBarDrawerToggleを左から右に移動したいのですが、appcompat21サポートライブラリを使用しています。私はこれに対する解決策を見つけていません。 Abhinav Puriが提案したように、アクションバー/ツールバーにカスタムアイテムを作成する必要があるようです。

ツールバーにカスタムビューを追加する方法がわからないとおっしゃいましたが、これがあなたやこの問題と戦っている人に役立つことを願っています。

            toolbar = (Toolbar) findViewById(R.id.toolbar);

                if (toolbar != null) {
                        setSupportActionBar(toolbar);
                }

                actionBar = getSupportActionBar();
                actionBar.setDisplayHomeAsUpEnabled(true);
                actionBar.setHomeButtonEnabled(true);
                actionBar.setDisplayShowHomeEnabled(true);
                actionBar.setDisplayShowCustomEnabled(true);

                ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
                                LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
                layoutParams.gravity = Gravity.RIGHT;
                actionBar.setCustomView(
                                getLayoutInflater().inflate(R.layout.custom_top_bar, null),
                                layoutParams);
                
                ImageButton rightToggle =(ImageButton) toolbar.findViewById(R.id.rightToggle);
                
                rightToggle.setOnClickListener(new OnClickListener() {
                        
                        @Override
                        public void onClick(View v) {
                                if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
                                        mDrawerLayout.closeDrawer(Gravity.RIGHT);
                                } else {
                                        mDrawerLayout.openDrawer(Gravity.RIGHT);
                                }
                        }
                });

custom_top_bar.xml:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/rightLayout"
    Android:layout_width="wrap_content"
    Android:layout_height="match_parent"
    Android:orientation="horizontal" >

    <ImageButton
        Android:id="@+id/rightToggle"
        Android:layout_width="?attr/actionBarSize"
        Android:layout_height="?attr/actionBarSize"
        Android:src="@drawable/ic_launcher" />

</LinearLayout>
3
Kinga l

それがどのように機能するかを知っていれば、それを非常に簡単に行うことができます。ほとんどのAndroidドロワーはアプリケーションのホームボタンをドロワーボタンとして使用します。このボタンの重力は変更できません。必要なのは、アクションで自分で作成した別のボタンをドロワーボタンに割り当てることだけです。バー(メニューボタン)では、onOptionsItemSelected.でアイコンとアクションを指定します

if (item.getItemId() == Android.R.id.home) {
    if(mDrawerLayout.isDrawerOpen(mLinearLayout)) {
        mDrawerLayout.closeDrawer(mmLinearLayout);
    }
    else {
    // open the drawer
    }
}

これとほぼ同じコードになります。Android.R.id.homeを、上記で説明したボタンのIDで変更します。

2
B.Moataz