如何使工具栏后退按钮居中?

How to center toolbar back button?

我在尝试将支持工具栏上的后退按钮居中时遇到问题。 我在 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);

但是,我得到的是:

如您所见,后退按钮放错了位置

编辑: 问题似乎出在 ?attr/actionBarSize 的自定义值设置为 40dp,但是,现在证明是标题放错了地方。

实现此目的的最佳方法是从工具栏中删除常规后退按钮,并在 XML 布局中添加自定义 ImageButton 并为其设置图像。您可以将此 ImageButtton 放在工具栏上的任何位置。

您的 activity 布局代码应该是这样的。

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

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

请记住,工具栏只是视图组,因此您可以按照自己喜欢的方式设置样式。 这是图片 link : Toolbar sample

希望对您有所帮助。

来自developer.android.com :

Toolbar supports a more focused feature set than ActionBar. From start to end, a toolbar may contain a combination of the following optional elements:

A navigation button. This may be an Up arrow, navigation menu toggle, close, collapse, done or another glyph of the app's choosing. This button should always be used to access other navigational destinations within the container of the Toolbar and its signified content or otherwise leave the current context signified by the Toolbar. The navigation button is vertically aligned within the Toolbar's minimum height, if set.

因此,如果您将 minHeight 属性设置为与您的工具栏高度相同 (layout_height ),后退箭头将是垂直居中。

搭载 - 如果您知道工具栏 minHeight 属性的大小,则可以使用:

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

在工具栏中使文本居中。如果您使用 android:minHeight="?actionBarSize" 那么这大约是 13p

对我来说,none 的解决方案有效。在我的例子中,问题是我申请的保证金:

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

@Rick Sanchez 答案有效,设置工具栏的 layout_height 与 minHeight

相同

我发现在工具栏构造函数中有一个字段可以设置按钮重力, mButtonGravity = a.getInteger(R.styleable.Toolbar_buttonGravity, Gravity.TOP);

,但v7支持Toolbar无法设置, mButtonGravity = Gravity.TOP;

将按钮大小设置为 56dp 并将 scaleType 设置为 center Appbar 上没有边距 确保您的图标尺寸 24x24

(2020)

如果你有一个非标准的工具栏高度,现在(2k20)用 androidx Toolbar 居中后退按钮你可以只使用 buttonGravity 属性.

这允许您使用 wrap_content 而不是特定高度(minHeight 不允许您这样做):

<androidx.appcompat.widget.Toolbar
   app:buttonGravity="center_vertical"
   android:layout_height="wrap_content"
   ... />

我正在使用

  <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar">

我应该在什么时候使用

 <style name="MyActionBar" parent="@style/Widget.AppCompat.Toolbar">