使用AppCompat-V-21工具栏小部件将导航抽屉图标设置在右侧

12

我一直在使用AppCompact-V21中提供的最新Toolbar Widget进行Material Design设计,包括导航抽屉。

我的问题是如何将导航抽屉图标设置到工具栏的右侧。尽管我可以通过设置android:layout_gravity="right"打开右侧的导航抽屉,但导航图标仍然出现在工具栏的左侧。

当使用旧版的Action Bar时,我可以创建自定义操作栏,并将按钮放置在右侧,并使用自定义的抽屉图标,在单击自定义导航抽屉图标时打开/关闭抽屉。

  1. 如何使用工具栏将导航抽屉图标设置到右侧?
  2. 如何为其创建自定义视图?

如果您仍然想要带有动画的汉堡包箭头图标,此解决方案展示了一个替代ActionBarDrawerToggle的方法:https://dev59.com/V1kT5IYBdhLWcg3wD7Zb#39136512。 - Mike M.
3个回答

9

如果你想自定义工具栏并设置自己的导航按钮,你可以将自己的imagebutton添加到工具栏中:

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


3
如何使用默认的汉堡图标并将其设置在右侧? - Sagar Devanga

3
我希望将ActionBarDrawerToggle从左侧移到右侧,我使用的是appcompat 21支持库。 我还没有找到解决办法。似乎我们需要像Abhinav Puri建议的那样在actionbar/工具栏中创建一个自定义项。
你说你不知道如何将自定义视图添加到工具栏中,希望这可以帮助你或任何与此问题作斗争的人:

  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>


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替换为我上面提到的按钮的Id。


由于我正在使用工具栏,所以不知道如何为其创建自定义视图。 - Dory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接