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

Android 如何创建左侧带有自定义按钮的工具栏?,android,android-toolbar,android-appcompat,Android,Android Toolbar,Android Appcompat,我是Android开发新手,在创建自定义工具栏方面遇到了很大的问题。我的要求: 左侧的自定义按钮(图标+文本) 自定义按钮后的分隔符 按钮高度应与工具栏相同(无边距) 以下是示例图像,它解释了我的要求: 我试图使用actionBar.setCustomView(v)但它没有解决我的问题: 右按钮具有上/下边距-它们比工具栏小 我无法添加分隔符 左按钮(来自自定义视图)小于工具栏高度 我的问题是: 我真的需要自定义视图来添加左侧的自定义按钮吗 如何在左侧添加分隔符 如何使按钮高度与工具栏高度相同

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

  • 左侧的自定义按钮(图标+文本)
  • 自定义按钮后的分隔符
  • 按钮高度应与工具栏相同(无边距)
  • 以下是示例图像,它解释了我的要求:

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

  • 右按钮具有上/下边距-它们比工具栏小
  • 我无法添加分隔符
  • 左按钮(来自自定义视图)小于工具栏高度
  • 我的问题是:

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

  • 工具栏
    基本上是一个
    框架布局
    ,因此您可以在布局标签中添加任何您想要的内容。在您的情况下,以下内容似乎就足够了:

    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>
    
    代码

    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
            }
        });
    }
    
    对于右侧的项目:只需使用默认的
    onCreateOptions菜单
    方法,并将相应的
    R.menu.*
    资源充气即可

    结果

    
    

    您还需要将app:contentInsetStartWithNavigation=“0dp”添加到工具栏

    您是否有机会测试提供的解决方案?
    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
            }
        });
    }
    
     <android.support.v7.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            app:contentInsetLeft="0dp"
            app:contentInsetStart="0dp"
            app:contentInsetStartWithNavigation="0dp"
          />