ActionBar CustomView 不会居中

ActionBar CustomView won't be centered

我有一些具有不同 actionBar 布局的屏幕,并尝试将每个 actionBar 的标题居中。这是我的布局:

actionbar_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"

        android:layout_gravity="center"
        android:text="Control"
        android:textColor="@color/fragment_title_font"
        android:id="@+id/fragmentTitle"
        android:textSize="14sp" />

    <com.joanzapata.iconify.widget.IconButton
        android:id="@+id/buttonActionbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:visibility="gone"
        android:background="@drawable/button_actionbar"
        android:text=""
        android:singleLine="true"
        android:textColor="#ffffffff"
        android:textSize="12sp"/>

</RelativeLayout>

这是显示我的自定义 actionBar 的代码:

actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
LayoutInflater mInflater = LayoutInflater.from(context);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
    new ActionBar.LayoutParams(
        ActionBar.LayoutParams.WRAP_CONTENT,
        ActionBar.LayoutParams.MATCH_PARENT,
        Gravity.CENTER
));

如果屏幕没有右键只有左边的UpButton,看起来没问题:

如果屏幕没有左边的UpButton但右边的按钮,它看起来也很好:

但是如果我想同时设置两者,我的标题就不会居中了:

是否可以在所有情况下将我的标题居中?

编辑:@tynn 的建议仅适用于我的第三个案例。总比没有好,谢谢!

你试过改变这个吗:

    actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
new ActionBar.LayoutParams(
    ActionBar.LayoutParams.WRAP_CONTENT,
    ActionBar.LayoutParams.MATCH_PARENT,
    Gravity.CENTER));

对此:

    actionBar.setCustomView(mInflater.inflate(R.layout.actionbar_layout, null),
new ActionBar.LayoutParams(
    ActionBar.LayoutParams.MATCH_PARENT,
    ActionBar.LayoutParams.MATCH_PARENT));

您的标题在所有案例中都居中,只是按钮重叠。如果您想使 TextView 相对于按钮居中,您需要相对于按钮进行布局定义,而不是相对于 parent 布局将其居中。

使用 LinearLayout 实现目标的一种可能方法(使用 RelativeLayout 应该很简单,但有点冗长)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/fragmentTitle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:gravity="center_horizontal"
        android:text="Control"
        android:textColor="@color/fragment_title_font"
        android:textSize="14sp" />

    <com.joanzapata.iconify.widget.IconButton
        android:id="@+id/buttonActionbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="15dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:visibility="gone"
        android:background="@drawable/button_actionbar"
        android:text=""
        android:singleLine="true"
        android:textColor="#ffffffff"
        android:textSize="12sp"/>

</LinearLayout>

如果你这样做,不应该明确设置 LayoutParams,如果你不使用 ActionBar.LayoutParams.WRAP_CONTENT 作为宽度

actionBar.setCustomView(R.layout.actionbar_layout);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);