1. gravity
vs layout_gravity
-
冲突原因:两者作用对象不同,混用会导致行为异常。
-
区别:
android:gravity
:父容器的属性,控制子元素在容器内的对齐方式。android:layout_gravity
:子元素的属性,控制自身在父容器中的对齐方式。
<!-- 父容器 -->
<LinearLayoutandroid:gravity="right" <!-- 子元素整体靠右 -->android:orientation="horizontal"><Buttonandroid:layout_gravity="left" <!-- 自身靠左 -->android:text="按钮" />
</LinearLayout>
-
此时
layout_gravity
可能会被父容器的gravity
覆盖,导致按钮仍然靠右。 -
正确用法:
- 若要让所有子元素靠右:用
android:gravity="right"
(父容器属性)。 - 若要让单个子元素靠右:用
android:layout_gravity="right"
(子元素属性)。
- 若要让所有子元素靠右:用
2. weightSum
+ layout_weight
的错误组合
-
冲突原因:
weightSum
设置总权重,子元素的layout_weight
需按比例分配。<LinearLayoutandroid:weightSum="2" <!-- 总权重为2 -->android:orientation="horizontal"><Buttonandroid:layout_width="0dp" <!-- 正确:让 weight 生效 -->android:layout_weight="1" /> <!-- 占1/2宽度 --><Buttonandroid:layout_width="wrap_content" <!-- 错误:固定宽度会导致 weight 失效 -->android:layout_weight="1" /> <!-- 无法正确分配剩余空间 --> </LinearLayout>
-
正确用法:
- 当使用
layout_weight
时,宽度 / 高度需设为0dp
(让权重决定尺寸)。 - 若子元素需要固定尺寸,不要用
layout_weight
。
- 当使用
3. 水平布局与垂直布局的属性限制
-
冲突原因:
layout_gravity
在不同方向的布局中生效方向不同。 -
水平布局(
orientation="horizontal"
):layout_gravity
只影响 垂直方向(如top
、bottom
、center_vertical
)。- 水平方向的
left
/right
无效。
-
垂直布局(
orientation="vertical"
):layout_gravity
只影响 水平方向(如left
、right
、center_horizontal
)。- 垂直方向的
top
/bottom
无效。<LinearLayout android:orientation="horizontal"><Buttonandroid:layout_gravity="right" <!-- 水平布局中无效 -->android:text="按钮" /> </LinearLayout>
-
正确用法:
- 水平布局中,若要按钮靠右,需设置父容器的
android:gravity="end"
。 - 垂直布局中,若要按钮靠右,可用
android:layout_gravity="end"
。
- 水平布局中,若要按钮靠右,需设置父容器的
4. padding
与 margin
的混淆
-
冲突原因:两者作用区域不同,混用可能导致间距异常。
-
区别:
padding
:控件内部的边距(内容与边界的距离)。margin
:控件外部的边距(与其他控件的距离)。<LinearLayout><Buttonandroid:padding="16dp" <!-- 按钮内部文字与边界的距离 -->android:layout_margin="16dp" <!-- 按钮与其他控件的距离 -->android:text="按钮" /> </LinearLayout>
-
正确用法:
- 调整按钮内部文本位置:用
padding
。 - 调整按钮与其他控件的间距:用
margin
。
- 调整按钮内部文本位置:用
5. 多方向的 gravity
冲突
-
冲突原因:同时设置水平和垂直方向的互斥值(如
left
+center_horizontal
)。<Buttonandroid:gravity="left|center_horizontal" <!-- 互斥值,导致布局异常 -->android:text="按钮" />
-
正确用法:
- 水平靠左 + 垂直居中:
android:gravity="start|center_vertical"
。 - 完全居中:
android:gravity="center"
。
- 水平靠左 + 垂直居中: