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

Posted

技术标签:

【中文标题】android:gravity="top" 不将子视图对齐到顶部,但“中心”对齐到中心?【英文标题】:android:gravity="top" doesn't align child view to top, but "center" aligns to center? 【发布时间】:2013-05-30 05:23:59 【问题描述】:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >

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

    <TextView
        android:layout_
        android:layout_
        android:text="0"
        android:textSize="56dp" />

    <TextView
        android:layout_
        android:layout_
        android:text="0"
        android:textSize="36dp" />
</LinearLayout>

难道不应该让较小的“0”t-view 对齐到内部 LinearLayout 的顶部吗? 由于另一个“0”的高度较大,因此增加了内部LinearLayout的整体高度。

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

android:layout_gravity="top"

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

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

【问题讨论】:

【参考方案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" 并分发到其他组件。

【讨论】:

以上是关于android:gravity="top" 不将子视图对齐到顶部,但“中心”对齐到中心?的主要内容,如果未能解决你的问题,请参考以下文章

android如何实现textview水平垂直居中

android如何实现textview水平垂直居中?

android studio gravity怎么添加两个属性

android:gravity="center" 不适用于大字体的三星

android textview 多行文字居中 不是gravity 也不是layout——gravity

andriod 文本居中: android:gravity="center"