Как создать панель инструментов с пользовательской кнопкой слева?

Я новичок в разработке Android, и у меня возникли большие проблемы с созданием настраиваемой панели инструментов. Мои требования:

  • Пользовательская кнопка слева (значок + текст)
  • Разделитель после пользовательской кнопки
  • Высота кнопок должна быть такой же, как панель инструментов (без полей)

Вот пример изображения, в котором объясняются мои требования: введите описание изображения здесь

Я пытался использовать actionBar.setCustomView(v);, но это не помогло решить мои проблемы:

  • Правые кнопки имеют верхнее/нижнее поле - они меньше, чем панель инструментов
  • Мне не удалось добавить разделитель.
  • Левая кнопка (из пользовательского вида) была меньше высоты панели инструментов.

Мои вопросы:

  • Мне действительно нужен пользовательский вид, чтобы добавить пользовательскую кнопку слева?
  • Как добавить разделитель слева?
  • Как сделать высоту кнопок такой же, как высота панели инструментов?

Ответ 1

Toolbar - это в основном FrameLayout, поэтому вы можете добавить внутри тега layout все, что захотите. В вашем случае достаточно похоже на следующее:

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.*.

Результат

результат изображения

Ответ 2

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

Вам также нужно приложение: contentInsetStartWithNavigation = "0dp" на панели инструментов