FlexboxLayout设置maxLine后Item被压缩或裁

2023-07-11  本文已影响0人  寻水的鱼Chock
前言

FlexboxLayout是Google开源的一个强大的控件,可实现灵活的可伸缩页面布局,是常规LinearLayout、ConstraintLayout等布局无法取代的对象。

当有这么一个需求时:布局存在最大行数,子View数量不定,不能压缩不能拉伸。
布局提供了一个属性maxLine,可以实现限制最大的行数,但是多余子View在空间不足时,只能压缩或者超出屏幕边界被裁剪。效果如下:

设置最大2行被裁剪.png
解决方案
  1. 去掉maxLine的限制
  2. addView完后主动调用measure计算所需行数
  3. 删除多余子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 {
    //没有超过行数限制
}



如果本文对你有帮助就点个赞支持下吧~~~

上一篇 下一篇

猜你喜欢

热点阅读