自定义ViewGroup-自动换行Layout

本文介绍了如何继承ViewGroup创建一个自动换行的Layout,着重讲解了在自定义ViewGroup中需要重写的方法,如onMeasure()和onLayout(),并讨论了View的三种测量模式。针对在FlowLayout中遇到的标签显示不完整的问题,作者实现了AutoNewLineLayout,并通过调整onMeasure()方法,解决了子View测量宽度错误的问题,增加了美观的间隔控制。
摘要由CSDN通过智能技术生成

一、继承ViewGroup需要做的

  1. 重写onMeasure()
    不仅要完成自己的measure过程,还要完成子View的measure过程。
  2. 重写onLayout()
    用来确定子View的位置。
  3. 重写generateLayoutParams()
    当在LinearLayout中写childView的时候,可以写layout_gravity,layout_weight属性;在 RelativeLayout中的childView有layout_centerInParent属性,却没有 layout_gravity,layout_weight,这是为什么呢?这是因为每个ViewGroup需要指定一个LayoutParams,用于 确定支持childView支持哪些属性,比如LinearLayout指定LinearLayout.LayoutParams等。

二、View的3种测量模式

ViewGroup会为childView指定测量模式,下面简单介绍下三种测量模式:

  • EXACTLY:表示设置了精确的值,一般当childView设置其宽、高为精确值、match_parent时,ViewGroup会将其设置为EXACTLY;
  • AT_MOST:表示子布局被限制在一个最大值内,一般当childView设置其宽、高为wrap_content时,ViewGroup会将其设置为AT_MOST;
  • UNSPECIFIED:表示子布局想要多大就多大,一般出现在AadapterView的item的heightMode中、ScrollView的childView的heightMode中;此种模式比较少见。

三、自动换行Layout

需求:显示个人擅长项目

需求

分析:

用LinearLayout、RelativeLayout动态添加TextView不能控制换行,用GridView不能达到显示效果。
拿来主义:https://github.com/hongyangAndroid/FlowLayout
使用鸿洋大神的FlowLayout( Android流式布局,支持单选、多选等,适合用于产品标签等),可以很轻松的实现上面的效果。

如果这样就完了,我就不用自己写了。

问题:

当一个标签字数较多,一行放不下的时候,使用FlowLayout时这个标签显示不完整。

FlowLayout

这样的话,我就需要自己重写一个控件了,当然,站在巨人的肩膀上,实现的比较快。

对照着FlowLayout,实现了自己的AutoNewLineLayout,这里只用显示,不需要考虑单选、多选的问题,所以现在最主要的是解决上述问题。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值