ActionBar CustomView不会居中

时间:2015-10-12 11:42:05

标签: android android-layout android-actionbar android-custom-view

我有一些具有不同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,它看起来很好: enter image description here

如果屏幕没有左侧UpButton但右侧按钮,它看起来也很好: enter image description here

但如果我想同时设置两者,我的标题不会更集中: enter image description here

在所有情况下都有可能将我的头衔集中在一起吗?

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

2 个答案:

答案 0 :(得分:1)

您的标题在所有情况下都居中,只是按钮重叠。如果要将TextView相对于按钮居中,则需要相对于按钮进行布局定义,而不是相对于父布局居中。

使用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);

答案 1 :(得分:0)

你有没有试过改变这个:

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