如何使用左侧的自定义button创build工具栏?

我是Android开发新手,在创build自定义工具栏方面遇到很大的问题。 我的要求:

  1. 左侧的自定义button(图标+文字)
  2. 分隔符后自定义button
  3. button高度应与工具栏相同(无边距)

这里是解释我的要求的示例图像: 在这里输入图像说明

我试图使用actionBar.setCustomView(v); 但它并没有解决我的问题:

  1. 右button具有顶部/底部边距 – 它们比工具栏小
  2. 我无法添加分隔线。
  3. 左button(从自定义视图)小于工具栏高度。

我的问题:

  1. 我真的需要自定义视图来添加左侧的自定义button吗?
  2. 如何添加分隔线在左边?
  3. 如何使button高度与工具栏高度相同?

Solutions Collecting From Web of "如何使用左侧的自定义button创build工具栏?"

Toolbar基本上是一个FrameLayout所以你可以添加任何你想要的布局标签。 在你的情况下,如下所示似乎是足够的:

layout.xml

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?actionBarSize" android:background="?colorPrimary" app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> <LinearLayout android:layout_width="wrap_content" android:layout_height="?attr/actionBarSize" android:divider="@drawable/divider" android:dividerPadding="8dp" android:orientation="horizontal" android:showDividers="end"> <TextView android:id="@+id/toolbar_save" style="@style/TextAppearance.Widget.AppCompat.Toolbar.Subtitle" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/selectableItemBackground" android:drawableLeft="@drawable/ic_action_check" android:drawablePadding="8dp" android:gravity="center_vertical" android:paddingLeft="16dp" android:paddingRight="16dp" android:text="Save" android:textAllCaps="true" /> </LinearLayout> </android.support.v7.widget.Toolbar> 

divider.xml

添加到你的/res/drawable文件夹。 这用作上面代码中的LinearLayout分隔符。

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="1dp" /> <solid android:color="@android:color/white" /> </shape> 

 private void setupToolbar() { Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); // Hide the title getSupportActionBar().setTitle(null); // Set onClickListener to customView TextView tvSave = (TextView) findViewById(R.id.toolbar_save); tvSave.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO } }); } 

就右侧的项目而言:只需使用默认的onCreateOptionsMenu方法,并且膨胀相应的R.menu.*资源。

结果

结果图像