使用AppCompat-V-21 Toolbar Widget在右侧设置NavigationDrawer图标

时间:2014-12-10 06:57:15

标签: android navigation-drawer android-toolbar

我一直在使用AppCompact-V21中提供的最新工具栏小工具和导航抽屉进行材料设计。

我关注的是如何将导航抽屉图标设置为工具栏的右侧。 虽然我可以通过设置android:layout_gravity="right"从右侧打开导航抽屉,但导航图标仍然显示在工具栏的左侧。

使用旧Action Bar时,我可以创建自定义操作栏,右侧带有自定义抽屉图标按钮,单击自定义导航抽屉图标可打开/关闭抽屉。

  1. 使用工具栏在右侧设置导航抽屉图标的方法是什么?
  2. 如何为它创建自定义视图?

3 个答案:

答案 0 :(得分:9)

好吧,要自定义工具栏并设置自己的导航按钮,可以将自己的图像按钮添加到工具栏中:

<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),并根据需要添加功能。

答案 1 :(得分:3)

我想从左到右移动ActionBarDrawerToggle,我正在使用appcompat 21支持库。 我还没有找到解决方案。似乎我们需要在Abhinav Puri建议的操作栏/工具栏中创建一个自定义项目。

您说您不知道如何在工具栏中添加自定义视图,希望这可以帮助您或任何正在解决此问题的人:

&#13;
&#13;
		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);
				}
			}
		});
&#13;
&#13;
&#13;

custom_top_bar.xml:

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

答案 2 :(得分:2)

如果你知道它是如何工作的,你可以很容易地做到这一点。 大多数Android抽屉使用应用程序的主页按钮作为抽屉按钮,此按钮的重力无法更改, 您所要做的就是在操作栏(菜单按钮)中为自己创建的另一个按钮指定抽屉按钮,在onOptionsItemSelected.

中为其指定一个图标和操作
if (item.getItemId() == android.R.id.home) {
    if(mDrawerLayout.isDrawerOpen(mLinearLayout)) {
        mDrawerLayout.closeDrawer(mmLinearLayout);
    }
    else {
    // open the drawer
    }
}

你将拥有与此相同的代码,通过上面讨论过的按钮更改android.R.id.home。