前言
FlexboxLayout
是Google开源的一个强大的控件,可实现灵活的可伸缩页面布局,是常规LinearLayout、ConstraintLayout等布局无法取代的对象。
当有这么一个需求时:布局存在最大行数,子View数量不定,不能压缩不能拉伸。
布局提供了一个属性maxLine
,可以实现限制最大的行数,但是多余子View在空间不足时,只能压缩或者超出屏幕边界被裁剪。效果如下:
解决方案
- 去掉maxLine的限制
- addView完后主动调用measure计算所需行数
- 删除多余子View
val cv = binding.mFlexboxLayout
//此处调用addView() 添加任意多的子View
cv.measure(
MeasureSpec.makeMeasureSpec(getScreenWidth(), MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(0, MeasureSpec.AT_MOST)
)
val ls = cv.flexLines
if (ls.size > 2) {//最大行数
var x = 0
for (i in 2 until ls.size) {
x += ls[i].itemCount
}
//此处调用removeViewAt() 删除x个子View
} else {
//没有超过行数限制
}
如果本文对你有帮助就点个赞支持下吧~~~