FluidLayout简介
FluidLayout
是本人开源的一个项目,提供了流式布局的布局方式。除了Android
中的LinearLayout
、RelativeLayout
、FrameLayout
、GridLayout
等常用布局方式,相信大家也曾有过流式布局的需求,比如各大软件中的标签、小说热搜列表等,都可能用到流式布局。
声明属性
FluidLayout
支持3种布局方式,当每一个子布局的高度不相同时,可以实现如下布局:
- top - 单行顶部对其
- bottom - 单行底部对其
- center - 单行垂直居中对齐
支持子view声明对其方式,以及父布局声明所有子view的对其方式,与常见的LinearLayout
等布局方式使用方法相同。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="FluidLayout">
<attr name="gravity" >
<flag name="top" value="0x30" />
<flag name="bottom" value="0x50" />
<flag name="center" value="0x11" />
</attr>
</declare-styleable>
<declare-styleable name="FluidLayout_Layout">
<attr name="layout_gravity">
<flag name="top" value="0x30" />
<flag name="bottom" value="0x50" />
<flag name="center" value="0x11" />
</attr>
</declare-styleable>
</resources>
测量尺寸、控制布局
通过继承ViewGroup
,实现onMeasure
方法及onLayout
方法。
-
onMeasure
- 通过测量子view的高宽、确定其对其方式,计算FluidLayout
的高宽; -
onLayout
- 根据子view的高宽及父布局的大小合理布局子view,实现流式布局。
自定义内部类LayoutParams
继承于ViewGroup.MarginLayoutParams
,实现FluidLayout
自己的布局属性,用于在子view中声明单独的对其方式。
包含如下三种自定义对其方式:
Gravity.TOP
、Gravity.BOTTOM
、Gravity.CENTER
.
来看下最终的效果:
`FluidLayout `- 支持嵌套在`ScrollView`中使用PS:本文及项目由本人原创,未经许可不得转载。
网友评论