android中重力和layout_gravity的优先级是啥?

Posted

技术标签:

【中文标题】android中重力和layout_gravity的优先级是啥?【英文标题】:What is the priority about gravity and layout_gravity in android?android中重力和layout_gravity的优先级是什么? 【发布时间】:2017-03-17 19:11:24 【问题描述】:

我正在测试 LinearLayout 并创建一个带有 2 个 TextViews 的 LinearLayoutLinearLayout 具有属性gravity="center_vertical"LinearLayout 中的第一个TextView 具有属性layout_gravity="top"

LinearLayoutgravity="center_vertical" 将其内容垂直居中。

layout_gravity="top" of TextView 告诉其容器将我放在顶部。

如果他们在一起会发生什么?

在我的实验中,'layout_gravity="top"' 不起作用。

以下是我的代码和结果:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_
android:layout_
android:gravity="center_vertical">
<TextView
    android:layout_
    android:layout_
    android:layout_gravity="top"
    android:text="textview 1"/>

<TextView
    android:layout_
    android:layout_
    android:text="textview 2"/>

</LinearLayout>

【问题讨论】:

【参考方案1】:

很可能,父元素的重力是第一个被执行的。您看不到 layout_gravity top 的效果,因为它遵循重力设置为其父元素。如果您不希望第一个 textview 出现在中间,则不应将重力 center_vertical 设置为 linearlayout。

【讨论】:

【参考方案2】:

Jay Bryant Casilang 的说法有些正确。这是因为父母的重力。但还有更多。也是因为它是LinearLayout

https://developer.android.com/guide/topics/ui/layout/linear.html

LinearLayout 旨在让视图在垂直或水平方向上彼此“相邻”。因为您在LinearLayout 上设置android:gravity="center_vertical",在第一个android:layout_gravity="top" 上设置TextView,您希望看到的是:

但是,这意味着两个布局之间会有间距。 “未说明”的间距(无边距、无填充等)。

LinearLayout 不允许这样做。

LinearLayout 的所有子级必须以某种方式彼此相邻(以线性方式,明白吗?)

顺便说一句,我是这样达到顶峰的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

    <TextView
        android:layout_
        android:layout_
        android:text="textview 1"/>

    <TextView
        android:layout_
        android:layout_
        android:layout_centerVertical="true"
        android:text="textview 2"/>

</RelativeLayout>

希望这很清楚。

【讨论】:

以上是关于android中重力和layout_gravity的优先级是啥?的主要内容,如果未能解决你的问题,请参考以下文章

android中的布局重力和重力有啥区别? [复制]

Android与重力的相对布局问题

为啥我不能用布局重力锁定 DrawerLayout

Android中layout_gravity和gravity的区别

Android UI布局之区分 android:gravity 和 android:layout_gravity

android:layout_gravity和android:gravity