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 个 TextView
s 的 LinearLayout
。
LinearLayout
具有属性gravity="center_vertical"
,LinearLayout
中的第一个TextView
具有属性layout_gravity="top"
。
LinearLayout
的gravity="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中layout_gravity和gravity的区别