使用双线按钮对齐问题

时间:2011-08-02 20:26:20

标签: android android-layout android-button

我想弄清楚为什么我的应用程序中的两行按钮比其他按钮移动了几个像素:

An error dialog.  The error message is "Error: No internet connection.  Please check your connection settings and try again."  There are three buttons beneath the error message: Retry, Cancel, and Network Settings.  The Network Setting button is a few pixels lower than the other buttons.

如果我缩短第三个按钮上的文本直到它适合一行,这不会发生,这告诉我它与换行符有关。将android:layout_gravity="top"添加到按钮的布局似乎没有帮助。可能导致这个问题的任何想法?

编辑:这是布局XML文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_height="wrap_content"
              android:orientation="vertical"
              android:gravity="center_horizontal"
              android:padding="10dip"
              android:layout_width="wrap_content">

  <TextView android:id="@+id/error_text"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dip"
            android:text="Place holder"
            android:layout_width="wrap_content"
            android:textSize="17dip"/>

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="center_horizontal"
                android:padding="10dip"
                android:layout_width="wrap_content">
    <Button android:id="@+id/ok_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/ok"
            android:textColor="@color/black"
            android:textStyle="bold"/>

    <Button android:id="@+id/cancel_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dip"
            android:text="@string/cancel_login"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:visibility="gone"/>

    <Button android:id="@+id/third_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dip"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:visibility="gone"/>
  </LinearLayout>
</LinearLayout>

5 个答案:

答案 0 :(得分:76)

默认情况下,水平LinearLayout会对齐其所有子控件的基线。因此,多行按钮中的第一行文本与其他按钮中的单行文本垂直对齐。

要停用此行为,请在android:baselineAligned="false"上设置LinearLayout

答案 1 :(得分:4)

看过你的布局(在设备上),我不确定为什么它表现出这种奇怪的行为。在调试布局时,我喜欢在Views上添加背景颜色,这样您就可以更清楚地看到它们占用的空间。如果我们删除所有填充,我们会发现按钮根本不在同一顶线上。如果我们将android:gravity="center_vertical"应用于包含LinearLayout,我们会看到前两个按钮居中,但最后一个按钮紧贴顶边。

对此的一个解决方案是使用RelativeLayout

重写内部容器
<RelativeLayout
            android:layout_height="wrap_content"
            android:padding="10dip"
            android:layout_width="wrap_content">

<Button android:id="@+id/ok_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ok"
        android:textColor="@color/black"
        android:textStyle="bold"/>

<Button android:id="@+id/cancel_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dip"
        android:layout_toRightOf="@id/ok_button"
        android:text="@string/cancel_login"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:visibility="gone"/>

<Button android:id="@+id/third_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dip"
        android:layout_toRightOf="@id/cancel_button"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:visibility="gone"/>
</RelativeLayout>

在我的测试中,通过使用RelativeLayout,您可以让所有按钮位于相同的上边缘。

答案 2 :(得分:2)

我使用以下更改运行您的代码,它工作正常: 将水平线性布局中的android:gravity从“center_horizo​​ntal”更改为“center”。

答案 3 :(得分:2)

我已将以下行添加到XML中的第三个按钮,并使其高度为“fill_parent”:

android:paddingTop="4dp"
android:layout_height="fill_parent"

对我来说,4dp工作正常,你可以检查你是否需要更多或更少。

进行这些更改,您的按钮会很好,就像它的伙伴一样: - )

答案 4 :(得分:0)

为所有三个按钮写 android:layout_height =“fill_parent”