android:gravity =“top”不会将子视图对齐到顶部,但“center”对齐到center?

时间:2013-06-03 23:05:45

标签: android android-linearlayout vertical-alignment gravity layout-gravity

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:gravity="top"   <!--this line-->
    android:orientation="horizontal" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="56dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="0"
        android:textSize="36dp" />
</LinearLayout>

不应该使较小的“0”t视图与内部LinearLayout的顶部对齐吗? 由于另一个“0”的高度较大,因此会增加内部LinearLayout的整体高度。

或者,如果你包括这个:

android:layout_gravity="top"

在较小的0的t视图内,它也什么都不做。 为什么是这样? LinearLayout的wrap_content是否独立于其他视图包装每个视图? 如果是这样,那么为什么将重力设置为“中心”呢?从某种意义上说,较小的零点垂直居中于其父级。

我知道您可以设置较小的0的高度以匹配父级并将其自身的重力设置为顶部。我只是想了解这一点。感谢。

3 个答案:

答案 0 :(得分:2)

gravity属性适用于LinearLayout中的小部件,而layout_gravity则告知LinearLayout的父级将子项放置在哪里(LinearLayout)。

此外,在垂直LinearLayout中,gravity="top"属性将无效。

在你现在的布局中,两个文本视图将一个堆叠在另一个上面,用线性布局包裹,中间没有空格 - 所以“顶部”或“中心”值不会做任何事情因为没有额外的空间可以向上或向下移动文本视图。

如果您想更好地理解这一点,请尝试使用不同颜色的线性布局和文本视图背景,如下所示:

android:background="@color/mycolor"

然后你会看到每个小部件的界限。

答案 1 :(得分:0)

您可以使用android:layout_weight="10"并在其他组件上分发。

答案 2 :(得分:0)

布局的默认行为是对齐文本的基线,英文位于视图的底部。将android:baselineAligned="false"添加到LinearLayout将使第二个TextView与视图顶部对齐。