ConstraintLayout 实现控件跟随效果
实现如下效果:
文字较少时右箭头跟随文字,文字较多时在最右侧。
<androidx.constraintlayout.widget.ConstraintLayout> |
使用链 (chain) 控制线性组
链是指通过双向位置约束条件相互关联的一组视图。链中的视图可以垂直或水平分布。
链可以才用以下几种样式之一:
Spread:在考虑外边距后,视图会均匀分布。这是默认值。
Spread inside:第一个视图和最后一个视图固定在链两端的约束条件上,其余视图均匀分布。
Weighted:当链设置为 spread 或 spread inside 时,您可以通过将一个或多个视图设置为 “match constraints” (
0dp
),来填充剩余空间。默认情况下,空间会在设置为 “match constraints” 的每个视图之间均匀分布,但您可以使用layout_constraintHorizontal_weight
和layout_constraintVertical_weight
属性为每个视图分配重要的权重。 其工作原理与线性布局中的 layout_weight 相同:权重值最高的视图获得的空间最多,权重相同的视图获得相同的空间量。Packed:在考虑外边距后,视图会打包在一起。您可以通过更改链的 “头” 视图偏差 (bias) 来调整整个链的偏差(向左或向右,或向上或向下)。
链的 “头” 视图(水平链中最左边的视图(采用从左到右的布局)和垂直链中最顶部的视图)在 XML 中定义链的样式。
可以通过给链头 View 设置属性来调整链的样式,如本文中给 tvTitle 设置 layout_constraintHorizontal_chainStyle="packed"
让文字和右箭头靠在一起。
调整约束偏差 (bias)
当您向视图的两侧添加约束条件并且相同维度的视图大小为 “fixed” 或 “wrap content” 时,view 将在这两个约束条件之间居中,默认偏差为 50%。
本文中设置 layout_constraintHorizontal_bias="0"
来让 tvTitle 在最左侧。
layout_constraintWidth
将此属性设置为
true
可让水平维度更改以遵循约束条件。默认情况下,设置为WRAP_CONTENT
的 widget 不受限制条件的限制。
该属性在 width 为 wrap_content
时生效,默认为 false
,当文字过长时会超出视图并将右箭头顶出界面。