1 Star 0 Fork 0

Good包籽 / FlowLayout

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

FlowLayout

1.流式布局分析

1.每一行的宽高

  • 换行条件就是,已使用的宽度 + 当前子view的宽度 + 子view之间的间隔 + FlowLayout的 paddingLeft + paddingRight,如果这个值大于FlowLayout的宽度,那就需要另起一行,再addView image.png

  • 每一行需要的高度就是所有子view的高度最大值

  • 当换行时,高度的值就是已使用的高度 + 这一行需要的高度 ,高度用List保存,后面onLayout布置view的位置

  • 子view用List<List>来保存,就是二维数组,用于后面onLayout使用

2.子view测量

  • 每个子view拿到自己的LayoutParams,加上FlowLayout的MeasureSpec
  • 通过getChildMeasureSpec 方法获取到子view的MeasureSpec
  • 子view再调用 childView.measure(childWidthMeasureSpec, childHeightMeasureSpec)
  • 最后childView.measuredWidth就是子view测量过的实际宽高

3.FlowLayout的大小(onMeasure)

image.png

  • 这里黑色代表Activity,最外层的ViewGroup
  • 红色代表FlowLayout,如果他的测量模式是EXACTLY,精确模式,那他的宽度就是自己的MeasureSpec.getSize()方法的大小,可能是match_parent,也可能是写的具体dp,子view大小不关心;如果不是,那就要受到子view大小影响,就要先测量子View加起来需要多少空间,再把需要的空间大小赋值。前面相当于给你两百平米的房子,里面怎么分小房间,都不会超过两百平,而后面一种是小房间加起来,最后你需要多大,再给多大的空间。
  • 蓝色代表子View ,子View的宽高影响自己的排列,如果宽度达到了FlowLayout的最大值,就需要换行了。

4.布局位置(onLayout)

  • 布局位置起始点在FlowLayout左上角,但要算上paddingTop 和 paddingLeft
  • 利用在onMeasure时计算的子view大小,循环将子view放到指定的位置

空文件

简介

自定义流式布局 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/GoodBaoZi/FlowLayout.git
git@gitee.com:GoodBaoZi/FlowLayout.git
GoodBaoZi
FlowLayout
FlowLayout
master

搜索帮助