WidgetLayout 介绍
WidgetLayout是一组继承于ViewGroup的自定义容器集合,大部分支持描边和内容分割线,目前实现了以下实用容器:
ColumnLayout 以等分列方式布局,每列可设置内容居左,中,右,及铺满,可设置最小最大列宽高限定。
NestRefreshLayout 一个精简强大的支持任意类型View的下拉刷新,上拉加载更多,可添加头部和尾部且可设置悬停模式。
NestFloatLayout 支持列表的嵌套滑动和指定子 View 悬停顶部,类似NestScrollView 。
PageScrollView 可水平垂直方向布局和滑动吸顶等,无需嵌套,支持ScrollView和ViewPager的交互和接口。
PageScrollTab 在PageScrollView上扩展支持Tab场景交互和各种UI定制。
WrapLayout 支持水平布局,并自适应换行,单行或列时支持weight属性,可限定每行最少和最多Item数,行内容可水平和垂直居中。
LabelLayout 继承自 WrapLayout,以ItemProvider 方式提供内容,有简单的回收复用机制,有Item点击监听。
HierarchyLayout 一个展示 View树层级关系和工具容器,可画出结束依赖图和3D层级图,计算出平均层级和最近一次measure,layout,draw的时间。
classlayer.jpg
实现背景及使用场景
1. 现有系统容器下开发界面经常遇到以下尴尬问题:
实现特定的组合布局,我们会用功能鲜明的4大常用布局去嵌套实现,增加了严重OverDraw的机率;
RelativeLayout 布局功能强大但是measure过程复杂(每次执行onMeasure 所有直接子View会有两次measure)
为实现复杂交互工作量比开发业务繁重,比如滑动控件的悬停或联动;
分割线或是边界线很多人常用View来实现,即耗内存,又影响测绘时间。
等分布局,使用多层不同方向LinearLayout来实现,嵌套太多。
常用容器控件还没有对自身做最大宽高限定的,也无对子 View 做最大宽高限定。
2. 适合的使用场景举例按需要选择,可减少布局嵌套和复杂的交互代码。
容器自身或对直接子View的最大宽高限定,容器内容和直接子View的gravity灵活支持。
容器需要描边或子View间画分割线的,或有各种间距要求,或按下自带激变层效果可使用继承于PressViewGroup的容器,如WrapLayout,LabelLayout,ColumnLayout。
常见的表格布局或动态等分布局可用ColumnLayout,支持每列的Align方式(左中右上下)和全铺满。
标签布局或需自适应换行可选用WrapLayout和LabelLayout,可设置行最少最多的View 个数和行居中,
列表需要嵌套滑动和悬停吸顶可用NestFloatLayout,类似NestScrollView 。
PageScrollView 可取代ScrollView&HorizontalScrollView 少嵌套,可设置任意子View滑动悬停在开始和结束位置,可不限定子View大小像 ViewPager 一样选中居中和滑动的交互。
WrapLayout,ColumnLayout是完全可替代支持不同方向的LinearLayout并能提供更多的布局约束,和背景,描边,分割等额外装饰。
以上容器都有一个共通的基类,便于统一监控性能打点如layout,mea