ActionBarSherlock中的按钮不是垂直居中的

时间:2013-03-21 17:42:23

标签: android android-layout android-actionbar actionbarsherlock

我在Android 4.0下面的设备遇到了问题,ActionBarSherlock中的按钮有时候不能垂直居中。这发生在运行Android 2.3.6的设备上,不会影响任何运行4.0 +的设备

我在ActionBarSherlock上做了一个非常简单的自定义布局,其自定义布局结构显示在下面的XML中

不能垂直居中按钮的布局:

<Button
    android:id="@+id/button_action_next"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="NEXT"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageButton
        android:id="@+id/button_action_home"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/people_app_theme_color"
        android:gravity="center"
        android:maxHeight="30dp"
        android:src="@drawable/android_home"
        android:text="HOME"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@android:color/white" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:minHeight="48dp"
        android:text="TextView"
        android:textColor="@android:color/white" />
</LinearLayout>

<Button
    android:id="@+id/button_action_prev"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="PREV"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

我只是无法在操作栏中垂直居中显示按钮(button_action_nextbutton_action_prev

我得到了这样的结果:

enter image description here

然而,在同一个应用程序中,我有另一个ActionBarSherlock的自定义布局,这可能奇怪地使按钮垂直居中。此自定义布局的布局如下所示:

可以垂直居中按钮的布局:

<Button
    android:id="@+id/button_actionbar_done"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="DONE"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<Button
    android:id="@+id/button_actionbar_skip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="SKIP"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<TextView
    android:id="@+id/text_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button_actionbar_skip"
    android:layout_alignBottom="@+id/button_actionbar_skip"
    android:layout_centerHorizontal="true"
    android:text="ENTER YOUR DETAILS"
    android:textColor="@android:color/white" />

工作布局与非工作布局之间的唯一区别是,无法居中的按钮中有一个子LinearLayout

所以我的问题是,如何在任何情况下确保按钮垂直居中(避免屏幕截图中显示的结果)?

更新:我尝试了什么

感谢@nicopico的评论和这篇SO帖子:Gravity and layout_gravity on Android。我已将layout_gravity="center"应用于我的布局,但按钮仍未垂直居中。

1 个答案:

答案 0 :(得分:0)

好的,我遇到了问题。

这是解决方案

解决方案1 ​​

在此布局中,

<Button
    android:id="@+id/button_actionbar_done"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="DONE"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<Button
    android:id="@+id/button_actionbar_skip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="SKIP"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<TextView
    android:id="@+id/text_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button_actionbar_skip"
    android:layout_alignBottom="@+id/button_actionbar_skip"
    android:layout_centerHorizontal="true"
    android:text="ENTER YOUR DETAILS"
    android:textColor="@android:color/white" />

我删除了

  

机器人:layout_alignParentTop = “真”

在两个按钮中,并应用:

  

机器人:layout_centerVertical = “真”

到两个按钮,它现在可以在ActionBar中垂直居中

解决方案2

根据这篇文章Android ActionBar: How to vertical align views in top

我可以将android:layout_marginBottomandroid:paddingBottom应用于按钮,使其居中。


但是我仍然更喜欢android:layout_centerVertical方法,该方法没有硬编码为数字。