
JAVA自定义布局 原创 精华
介绍
自定义布局有两种:继承原有布局拓展、自我设置布局。前一种比较简单,这篇文章主要讲的是自我设置布局。这个设置的是一个靠左纵向展示子组件的布局,比较特殊的是如果父布局有可展示空间,子组件的高度比自身高度高,布局本身会使用子组件的高度。
实现步骤
1、继承布局类,实现构造方法
2、测量布局,这里不仅要对容器组件进行测量,还需要对其子组件进行测量
3、根据测量结果进行子组件位置排放
布局基类继承
继承布局的基类ComponentContainer,这里如果有自定义属性的设置,参照上一篇文章“JAVA自定义组件”中的自定义属性,这里不做描述。具体代码如下:
布局及其子组件测量
这一步我们需要弄懂三种测试模式,不同测量模式,测量结果也不同:
1、UNCONSTRAINT,父组件对子组件没有约束,表示子组件可以任意大小。例如,带滚动条的父布局,组件设置多大就是多大。
2、PRECISE,父组件已确定子组件的大小。例如,组件设置match_parent。
3、NOT_EXCEED,已为子组件确定了最大大小,子组件不能超过指定大小。例如,组件设置match_content,此时使用组件默认大小。
我们需要继承Component.EstimateSizeListener接口,实现onEstimateSize方法来完成测量,并把测量结果使用setEstimatedSize对组件进行设置。
1、获取xml配置的宽高、模式。
2、对子组件进行测量,将子组件测量结果使用setEstimatedSize对组件进行设置。
3、将子组件的测试结果记录下来,用于后面的位置排放。
4、根据子组件测试结果,改变布局组件的xml配置,并使用setEstimatedSize对布局组件进行设置。
具体代码如下:
子组件位置排放
我们需要继承ComponentContainer.ArrangeListener接口,实现onArrange方法来完成子组件位置排放。这里使用了上面测量的结果childrenView(子组件位置、宽高信息)来排放子组件的位置。
具体代码如下:
总结
实现自定义布局,测量组件及其子组件宽高、根据测量宽高来排放子组件的位置这两步,均需要在构造函数添加其监听。
完整的java代码如下:
完整的xml代码如下:
