如何在更改工具栏

时间:2016-08-20 12:44:51

标签: android toolbar menuitem

更改(减小)工具栏的高度(wrap_content为40dp)后,标题仍为center_vertical,但菜单项偏向底部。怎么修?感谢。

enter image description here

代码:

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>

[工具栏]

1 个答案:

答案 0 :(得分:0)

您的问题是工具栏的默认行为。没有正式的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"
        ... />