如何在左侧创建带有自定义按钮的工具栏?

20

我刚开始学习Android开发,创建自定义工具栏方面遇到了很大的问题。我的需求如下:

  1. 左侧有自定义按钮(图标+文本)
  2. 自定义按钮后面有分隔线
  3. 按钮高度应与工具栏相同(无边距)

这是一个样例图片,解释了我的需求: 进入图片描述

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

  1. 右侧按钮有上/下边距 - 它们比工具栏小
  2. 我无法添加分隔线。
  3. 从自定义视图中的左侧按钮比工具栏高度小。

我的问题:

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

你有没有机会测试提供的解决方案? - reVerse
2个回答

41

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.*资源即可。

结果

结果图片


1
 <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        app:contentInsetLeft="0dp"
        app:contentInsetStart="0dp"
        app:contentInsetStartWithNavigation="0dp"
      />

需要将app:contentInsetStartWithNavigation="0dp"添加到工具栏中。

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