Подтвердить что ты не робот

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

У меня проблема с попыткой центрировать кнопку "Назад" на панели инструментов поддержки. Я использую его внутри ActionBarActivity.

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:toolbar="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    toolbar:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    toolbar:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

И настройте вверх навигацию внутри Activity onCreate() следующим образом:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

getSupportActionBar().setTitle(R.string.title_activity_scanner);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Однако я получаю следующее: not centered back button screenshot Поскольку вы можете видеть, что кнопка "Назад" неуместна

Изменить: Кажется, что проблема заключается в настраиваемом значении для ?attr/actionBarSize, установленном на 40dp, однако теперь выясняется, что это заголовок, который вместо этого заменен.

4b9b3361

Ответ 1

Из developer.android.com:

Панель инструментов поддерживает более сфокусированный набор функций, чем ActionBar. С самого начала для завершения, панель инструментов может содержать комбинацию следующих необязательных элементы:

Кнопка навигации. Это может быть стрелка вверх, переключатель меню навигации, закрыть, свернуть, сделать или другой символ выбора приложения. Эта всегда должна использоваться для доступа к другим навигационным пунктам в контейнере панели инструментов и ее обозначенном содержимом или в противном случае оставить текущий контекст, обозначенный панелью инструментов. The навигационная кнопка выравнивается по вертикали в пределах минимальной панели инструментов высота, если установлено.

Итак, если вы установите атрибут minHeight так же, как и высота вашей панели инструментов (layout_height), стрелка назад будет центрирована по вертикали.

Ответ 2

Внутри ActionBarActivity

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  setSupportActionBar(toolbar);
  getSupportActionBat().setTitle("Hello World"); 
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
  getSupportActionBar().setHomeButtonEnabled(true);

Код макета:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/primary"
        app:theme="@style/ToolbarTheme"
        app:popupTheme="@style/Theme.AppCompat"/>

И стиль:

 <style name="AppTheme.Base" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="windowActionBar">false</item>
</style>

<style name="AppTheme" parent="AppTheme.Base">

Помните, что панель инструментов - это только группа viewgroup, поэтому вы можете ее стиль любым способом. Ссылка на изображение: Пример панели инструментов

Надеюсь, что это поможет.

Ответ 3

Лучший способ добиться этого - удалить обычную кнопку "Назад" на панели инструментов и добавить пользовательский ImageButton в свой XML-макет и установить для него образ. Вы можете разместить этот ImageButtton там, где хотите на панели инструментов.

Ваш код макета деятельности должен быть примерно таким.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />

    <ImageButton
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:id="@+id/button"
        android:src="@drawable/attach_icon"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

Ответ 4

Вывод @Rick Sanchez - если вы знаете размер атрибута minHeight панели инструментов, вы можете использовать:

android:gravity="top"
app:titleMarginTop="@dimen/margin_to_center"

на панели инструментов, чтобы центрировать текст. Если вы используете android:minHeight="?actionBarSize", тогда это будет около 13p

Ответ 5

Для меня ни один из решений не работал. В моем случае проблема заключалась в том, что я применил:

 <android.support.v7.widget.Toolbar
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     ... >

     <View
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp" />

 </android.support.v7.widget.Toolbar>

После непосредственного обращения к панели инструментов кнопка была по центру вертикально:

 <android.support.v7.widget.Toolbar
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginBottom="10dp"
     android:layout_marginTop="10dp"
     ... >

     <View
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

 </android.support.v7.widget.Toolbar>

Ответ 6

@Rick Sanchez ответ - это работа, настройка панели инструментов layout_height так же, как minHeight

Я нашел в конструкторе панели инструментов поле, которое может настроить гравитацию кнопки, mButtonGravity = a.getInteger(R.styleable.Toolbar_buttonGravity, Gravity.TOP);

но v7 поддержка панели инструментов не может быть настроена, mButtonGravity = Gravity.TOP;

Ответ 7

Сделайте размер кнопки 56dp и установите scaleType в center без полей на Appbar Убедитесь, что ваш значок имеет размеры 24x24