it-swarm.com.ru

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

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

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

Вот пример изображения, которое объясняет мои требования:  enter image description here

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

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

Мои вопросы:

  1. Мне действительно нужен пользовательский вид, чтобы добавить пользовательскую кнопку слева?
  2. Как добавить разделитель слева?
  3. Как сделать так, чтобы высота кнопок соответствовала высоте панели инструментов?
11
fedor.belov

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>

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

Результат

 result image

29
reVerse
 <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" на панели инструментов

0
jerboy