没有合适的资源?快使用搜索试试~ 我知道了~
Android自定义ViewGroup实现流式布局
1 下载量 26 浏览量
2021-01-20
08:31:03
上传
评论
收藏 76KB PDF 举报
温馨提示
试读
3页
本文实例为大家分享了Android自定义ViewGroup实现流式布局的具体代码,供大家参考,具体内容如下 1.概述 本篇给大家带来一个实例,FlowLayout,什么是FlowLayout,我们常在App 的搜索界面看到热门搜索词,就是FlowLayout,我们要实现的就是图中的效果,就是根据容器的宽,往容器里面添加元素,如果剩余的控件不足时候,自行添加到下一行,FlowLayout也叫流式布局,在开发中还是挺常用的. 2.对所有的子View进行测量 onMeasure方法的调用次数是不确定的,所以为了避免测量出错,需要把总的List集合,清空一下,一个View的绘制,需要经过onMe
资源推荐
资源详情
资源评论
Android自定义自定义ViewGroup实现流式布局实现流式布局
本文实例为大家分享了Android自定义ViewGroup实现流式布局的具体代码,供大家参考,具体内容如下
1.概述概述
本篇给大家带来一个实例,FlowLayout,什么是FlowLayout,我们常在App 的搜索界面看到热门搜索词,就是FlowLayout,我们要实
现的就是图中的效果,就是根据容器的宽,往容器里面添加元素,如果剩余的控件不足时候,自行添加到下一行,FlowLayout也叫流
式布局,在开发中还是挺常用的.
2.对所有的子对所有的子View进行测量进行测量
onMeasure方法的调用次数是不确定的,所以为了避免测量出错,需要把总的List集合,清空一下,一个View的绘制,需要经过
onMeasure方法的测量,和onLayout方法的排版才能显示出来,在测量的方法中,我们把该ViewGroup中的所有子View遍历出来,
添加到一行中的List集合中,再把一行中的所有的元素集合添加到总的集合中去,并对每个子View元素进行测量,测量的参数,我们
给0,或者未指定,,如果不是一行中的第一元素,并且通过 getUsablewWidth()方法获取一行中可用的宽度,不够容纳下一元素,时就
新创建一个集合,来装一行中所有元素,再把所有的子View元素全部测量完成后,我们还需要通过setMeasuredDemoetion()方法
把测量出来的宽和高保存起来,保存之后可以调用getMeasureWidth获取测量之后的宽了.
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
allLines.clear();
//测量容器的宽和高
int containerMeasuredWidth = MeasureSpec.getSize(widthMeasureSpec);
//这个集合用于保存单行
ArrayList<View> oneLine = null;
for (int i = 0; i < getChildCount(); i++) {
//获取每一Chiledview
View child = getChildAt(i);
int UnspecifiedMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
child.measure(UnspecifiedMeasureSpec, UnspecifiedMeasureSpec);//相当于传了一个0,0;
//如果是第1个view就new一个新行出来,或者View大于了可用的宽度,
if (i == 0 || child.getMeasuredWidth() > getUsablewWidth(containerMeasuredWidth, oneLine,oneLine.size())) {
oneLine = new ArrayList<View>();
allLines.add(oneLine);
}
oneLine.add(child);
}
int lineNumber = allLines.size();
int allLinesHeight = getChildAt(0).getMeasuredHeight() * lineNumber;
int verticalTotalpadding = getPaddingBottom() + getPaddingTop();
//垂直总的spcing
int verticalTotalSpcing = 8 * (lineNumber - 1);
//容器的高 = 所有View的高 + 垂直方向的Padding + 垂直总的spcing
int containerMeasureHeight = allLinesHeight + verticalTotalpadding + verticalTotalSpcing;
setMeasuredDimension(containerMeasuredWidth, containerMeasureHeight);
}
3.获取一行中可用的空间获取一行中可用的空间
获取一行中可用的宽度,需要我们传入容器的宽度,和一行元素的集合,和元素之间的间隔,,然后遍历所有的元素,通过一个变量来
保存所有View测量出来宽度的总和,用容器的宽 减去,子View宽度的总和减去水平方向的间隔,以及左右两边的Padding,得到一
行中可用的宽度
资源评论
weixin_38620959
- 粉丝: 10
- 资源: 923
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Android的学生信息管理2.rar
- 3e9ef566-ba13-47b0-a252-77aa9e4b040f8412130.apk
- 毕业设计基于SSM的房屋租赁系统源【源码+lw+部署+讲解】
- 基于Android男装出口管理系统的app.rar
- 工资表生成工资条Excel模版
- 位运算、状态压缩、枚举子集汇总.html
- C++毕业设计快递分拣机器人系统源码+论文文件+资料.zip
- 锐龙处理器 体质分析工具,体质越好越稳定,越容易超频 tool1007/Win V/F
- IOS Swift3 四种单例模式详解及实例《PPT文档》
- Swin-Unet网络预训练模型,swin-tiny-patch-window7-224.pth
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功