Android使用XML与style排布按钮出现布局渲染异常及属性优先级疑问
问题解答
1. XML布局属性是否覆盖style同名属性
是,Android的View属性加载优先级中,布局XML中直接为控件声明的属性优先级高于style中定义的同名属性,二者同时存在时,布局里写的属性会直接覆盖style中的配置。
2. 按钮间距不均的原因
你当前的写法存在约束冲突,是布局异常的核心原因:
你在style1中为每个按钮都声明了layout_constraintTop_toTopOf="parent"和layout_constraintBottom_toBottomOf="parent",也就是每个按钮默认都被上下约束到父布局的上下边缘;同时你又在每个按钮的布局代码里额外添加了和其他按钮的上下绑定约束,多重冲突的约束会让ConstraintLayout无法按预期计算位置,最终出现间距混乱的情况。
正确实现均匀排列的方案
要实现三个按钮垂直均匀分布,调整逻辑如下:
- 删掉style1中不需要的上下约束,只保留通用属性:
<style name="style1"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textSize">10dp</item> <item name="android:textColor">@color/teal_200</item> <!-- 只保留左右居中的通用约束 --> <item name="layout_constraintLeft_toLeftOf">parent</item> <item name="layout_constraintRight_toRightOf">parent</item> </style>
- 给三个按钮形成垂直权重链,设置chain样式为spread即可均匀分布:
<Button style="@style/style1" android:id="@+id/b1" android:text="button1" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@+id/b2" app:layout_constraintVertical_chainStyle="spread" /> <Button style="@style/style1" android:id="@+id/b2" android:text="button2" app:layout_constraintTop_toBottomOf="@+id/b1" app:layout_constraintBottom_toTopOf="@+id/b3" /> <Button style="@style/style1" android:id="@+id/b3" android:text="button3" app:layout_constraintTop_toBottomOf="@+id/b2" app:layout_constraintBottom_toBottomOf="parent" />
内容的提问来源于stack exchange,提问作者Denys_newbie
相关产品推荐
相关产品推荐

