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