如何使工具栏后退按钮居中?
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
希望对您有所帮助。
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">
我在尝试将支持工具栏上的后退按钮居中时遇到问题。 我在 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
希望对您有所帮助。
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">