21

У меня возникла проблема с попыткой центрировать кнопку «Назад» на панели инструментов поддержки. Я использую его внутри 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" /> 

И установить навигацию внутри Активности-х 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, однако теперь выясняется, что это название, которое неверно вместо этого.

+0

Одно из действий, которые, как я думаю, отключает эту кнопку возврата и помещает виджет кнопки внутри и выравнивает его по своему желанию. Надеюсь, поможет!!! –

+0

вы можете удалить метку minHeight и добавить высоту как «? Attr/actionBarSize» вместо «wrap_content» –

+0

@Viren Я бы хотел, чтобы избежать заново открыть колесо, если возможно – mewa

ответ

53

От developer.android.com:

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

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

Так что, если вы установите MinHeight атрибут такие же, как ваша высоту панели инструментов (layout_height), задняя стрелка будет центрируются по вертикали.

+3

Спасибо за короткий и умный ответ –

+1

Я использовал пользовательскую панель инструментов: тема, поэтому моя проблема была решена путем удаления ' @ android:/abc_action_bar_stacked_max_height 'из моей темы панели инструментов –

+0

Если использовать поддержку v7 до 24, мы можем установить' maxButtonHeight' равный 'android: minHeight', чтобы сделать эффект вертикального центра. После версии v7> = 24 + мы можем установить attr 'buttonGravity'. – act262

1

Лучший способ добиться этого - удалить обычную кнопку «Назад» на панели инструментов и добавить пользовательский 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> 
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, так и может укладывать его в любом Кстати, у. Ссылка на изображение: Toolbar sample

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

0

Спекуляция прочь @Rick Sanchez answer - если вы знаете размер на Панели инструментов minHeight атрибутов, то вы можете использовать:

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

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

0

Для меня ни один из решений не работал. В моем случае проблема была маржа я применил:

<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> 
0

@Rick Sanchez ответ работа, настройка Панели инструментов layout_height так же, как MinHeight

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

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