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