关于layout_gravity和重力的垂直和水平方向的区别
The difference between vertical and horizontal orientation about layout_gravity and gravity
我在 LinearLayout 中有一个 TextView。
我想尝试 layout_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_gravity
和 gravity
的一切都有意义。但是当我有 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>
尝试向布局添加多个视图,这将帮助您给出一个准确的想法。
换句话说,在水平方向的线性布局中,如果您设置布局重心,您的视图将对齐到线性布局的高度中心,如果您将布局重心设置为垂直对齐的线性布局,它将对齐您的视图中心到线性布局的宽度
要理解的主要事情是 child 视图上的 layout_gravity
是一个属性,它“向上”传达 parent,并“询问”parent 以某种方式行事。
在这种情况下,parent 是一个 LinearLayout
,它具有不同的属性 (orientation
),该属性已经影响 child 视图的定位。因此,当 child 指定 layout_gravity
时,会发生什么取决于 LinearLayout
的 orientation
。
- 对于
horizontal
LinearLayout,child 的 layout_gravity
的任何水平组件都将被忽略。
- 对于
vertical
LinearLayout,忽略 child 的 layout_gravity
的任何垂直组件。
您正在使用 center
,基本上是 center_vertical
+ center_horizontal
。所以对于水平的LinearLayout,水平居中将被忽略。并且,对于垂直的 LinearLayout,垂直居中将被忽略。
鉴于您的示例只有一个 child 视图,您可以考虑将 parent LinearLayout
替换为 FrameLayout
。那么childlayout_gravity
就会得到充分的尊重
我在 LinearLayout 中有一个 TextView。
我想尝试 layout_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_gravity
和 gravity
的一切都有意义。但是当我有 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>
尝试向布局添加多个视图,这将帮助您给出一个准确的想法。 换句话说,在水平方向的线性布局中,如果您设置布局重心,您的视图将对齐到线性布局的高度中心,如果您将布局重心设置为垂直对齐的线性布局,它将对齐您的视图中心到线性布局的宽度
要理解的主要事情是 child 视图上的 layout_gravity
是一个属性,它“向上”传达 parent,并“询问”parent 以某种方式行事。
在这种情况下,parent 是一个 LinearLayout
,它具有不同的属性 (orientation
),该属性已经影响 child 视图的定位。因此,当 child 指定 layout_gravity
时,会发生什么取决于 LinearLayout
的 orientation
。
- 对于
horizontal
LinearLayout,child 的layout_gravity
的任何水平组件都将被忽略。 - 对于
vertical
LinearLayout,忽略 child 的layout_gravity
的任何垂直组件。
您正在使用 center
,基本上是 center_vertical
+ center_horizontal
。所以对于水平的LinearLayout,水平居中将被忽略。并且,对于垂直的 LinearLayout,垂直居中将被忽略。
鉴于您的示例只有一个 child 视图,您可以考虑将 parent LinearLayout
替换为 FrameLayout
。那么childlayout_gravity
就会得到充分的尊重