关于layout_gravity和重力的垂直和水平方向之间的差异

问题描述

我在LinearLayout中有一个TextView。

我想为layout_gravity和gravity尝试不同的模式。

我有此代码:

<LinearLayout
    android:layout_width="150dp"
    android:layout_height="50dp"
    android:background="#A55C93"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/textView1"
        android:background="#005Cff"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_width="50dp"
        android:layout_height="25dp"
        android:text="text"
        android:textSize="21sp" />
</LinearLayout>

当我有android:orientation="vertical"时,关于layout_gravitygravity的一切都有意义。但是当我有android:orientation="horizontal"时,输出与第一个不同,为什么?

解决方法

尝试此代码,您将看到区别 增加布局高度以查看差异;它将帮助您更好地了解流程

将重心设置为水平线性布局时,该中心不指水平中心,而是指垂直中心。

我知道这听起来很混乱,但是尝试这段代码,您将对我想说的话有一个更好的了解。

<LinearLayout
android:layout_width="150dp"
android:layout_height="500dp"
android:background="#A55C93"
android:orientation="horizontal"
>
<TextView
    android:id="@+id/textView1"
    android:background="#005Cff"
    android:layout_gravity="center"
    android:layout_width="50dp"
    android:layout_height="25dp"
    android:text="text"
    android:textSize="21sp"
    />
</LinearLayout>

也可以尝试垂直

<LinearLayout
android:layout_width="150dp"
android:layout_height="500dp"
android:background="#A55C93"
android:orientation="vertical"
  tools:ignore="MissingConstraints"

  >
<TextView
    android:id="@+id/textView1"
    android:background="#005Cff"
    android:layout_gravity="center"
    android:layout_width="50dp"
    android:layout_height="25dp"
    android:text="text"
    android:textSize="21sp"
    />
</LinearLayout>

尝试将多个视图添加到布局中,这将帮助您给出精确的想法。 换句话说,如果您将布局重心设置为水平对齐,则在水平方向的线性布局中将视图与线性布局的高度中心对齐;如果将布局重心设置为垂直对齐的线性布局,则将视图中心对齐为线性布局的宽度

,

主要要理解的是,子视图上的layout_gravity是一个属性,该属性将“向上”传达给父级,并“询问”父级以某种方式行事。

在这种情况下,父级是LinearLayout,它具有不同的属性(orientation),该属性已经影响子视图的位置。因此,当孩子指定layout_gravity时,发生的情况取决于LinearLayout的{​​{1}}。

  • 对于orientation的LinearLayout,将忽略子级horizontal的任何水平分量。
  • 对于layout_gravity的LinearLayout,将忽略子级vertical的任何垂直分量。

您正在使用layout_gravity,基本上是center + center_vertical。因此,对于水平LinearLayout,将忽略水平居中。而且,对于垂直的LinearLayout,将忽略垂直居中。

鉴于您的示例仅具有一个子视图,您可以考虑将父center_horizontal替换为LinearLayout。然后孩子FrameLayout将得到充分尊重。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...