【问题标题】:android:gravity="top" doesn't align child view to top, but "center" aligns to center?android:gravity="top" 不将子视图对齐到顶部,但“中心”对齐到中心?
【发布时间】:2013-05-30 05:23:59
【问题描述】:
<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-view 对齐到内部 LinearLayout 的顶部吗? 由于另一个“0”的高度较大,因此增加了内部LinearLayout的整体高度。

或者,如果您包含以下内容:

android:layout_gravity="top"

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      gravity 属性适用于 LinearLayout 内的小部件,而 layout_gravity 告诉 LinearLayout 的父级将子级 (LinearLayout) 放在哪里。

      此外,在垂直 LinearLayout 中,gravity="top" 属性将不起作用。

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

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

      android:background="@color/mycolor"
      

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

      【讨论】:

      • android:orientation="horizontal" 会将TextViews 彼此相邻放置。
      【解决方案3】:

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

      【讨论】: