更改工具栏高度后如何将菜单项对齐 center_vertical
How to align menu item to center_vertical after changed the height of toolbar
更改(减少)工具栏的高度(wrap_content 到 40dp)后,标题仍然是 center_vertical,但菜单项偏向底部。怎么修?谢谢。
代码:
toolbar.inflateMenu(R.menu.menu_toolbar);
XML:(如果我不改layout_height="40dp",那没问题)
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:background="?attr/colorAccent"
android:minHeight="?attr/actionBarSize"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp"
app:titleTextAppearance="@style/Toolbar.TitleText" />
菜单项XML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity"
android:gravity="end|center">
<item
android:id="@+id/action_add"
android:icon="@drawable/ic_add_black_24dp"
android:orderInCategory="10"
android:title="添加"
app:showAsAction="always" />
<item
android:id="@+id/action_delete"
android:icon="@drawable/ic_remove_black_24dp"
android:orderInCategory="10"
android:title="删除"
app:showAsAction="always" />
<item
android:id="@+id/action_start"
android:icon="@drawable/ic_play_arrow_black_24dp"
android:orderInCategory="10"
android:title="开启"
app:showAsAction="always" />
<item
android:id="@+id/action_stop"
android:icon="@drawable/ic_stop_black_24dp"
android:orderInCategory="10"
android:title="停止"
app:showAsAction="always" />
</menu>
[工具栏]
您的问题是 Toolbar.There 的默认行为没有正式 api 将图标设置为垂直居中。
以下代码为非官方方式
public class CustomToolbar extends Toolbar {
public CustomToolbar(Context context) {
super(context);
}
public CustomToolbar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CustomToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
for(int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
if (child instanceof ActionMenuView) {
child.setTop(0); // FIXME: Move child in vertically center to be exact
}
}
}
}
在您的布局中:
<{replace here with package name}.CustomToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorAccent"
... />
更改(减少)工具栏的高度(wrap_content 到 40dp)后,标题仍然是 center_vertical,但菜单项偏向底部。怎么修?谢谢。
代码:
toolbar.inflateMenu(R.menu.menu_toolbar);
XML:(如果我不改layout_height="40dp",那没问题)
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_centerInParent="true"
android:background="?attr/colorAccent"
android:minHeight="?attr/actionBarSize"
app:contentInsetEnd="0dp"
app:contentInsetStart="0dp"
app:titleTextAppearance="@style/Toolbar.TitleText" />
菜单项XML:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity"
android:gravity="end|center">
<item
android:id="@+id/action_add"
android:icon="@drawable/ic_add_black_24dp"
android:orderInCategory="10"
android:title="添加"
app:showAsAction="always" />
<item
android:id="@+id/action_delete"
android:icon="@drawable/ic_remove_black_24dp"
android:orderInCategory="10"
android:title="删除"
app:showAsAction="always" />
<item
android:id="@+id/action_start"
android:icon="@drawable/ic_play_arrow_black_24dp"
android:orderInCategory="10"
android:title="开启"
app:showAsAction="always" />
<item
android:id="@+id/action_stop"
android:icon="@drawable/ic_stop_black_24dp"
android:orderInCategory="10"
android:title="停止"
app:showAsAction="always" />
</menu>
[工具栏]
您的问题是 Toolbar.There 的默认行为没有正式 api 将图标设置为垂直居中。
以下代码为非官方方式
public class CustomToolbar extends Toolbar {
public CustomToolbar(Context context) {
super(context);
}
public CustomToolbar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CustomToolbar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
for(int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
if (child instanceof ActionMenuView) {
child.setTop(0); // FIXME: Move child in vertically center to be exact
}
}
}
}
在您的布局中:
<{replace here with package name}.CustomToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorAccent"
... />