设计最初是因为公司项目需要多处显示多个小标签,并且需要多行展示,最开始使用的GridLayout,但是这个网格布局局限性太高,标签是动态的,内容也不定,用GridLayout就会有多行占用的各种显示问题,所以后来换成了LinearLayout动态添加,写完以后就有了写一个继承LinearLayout的自动换行布局的想法。
GridLayout的显示效果:
即使根据长度自动设置占据行数,还是会有显示上的问题,更何况如果碰到符号类,实际长度又比判断内容长度时设想的短不少,显示出来就更丑了。
优化之后的显示效果:
优化之后,动态添加子View的时候会读子View的长度,判断长度大于一行就自动换行,基本达到了想要的效果,但是代码比较繁琐,多处使用的时候会比较麻烦,所以就写成了一个View,这样调用后传数据进去就可以自动生成了。
(修改)修改原因是觉得自己写的函数太多,没办法融入到View的体系里面,刷新、内边距、外边距等操作都需要手动操作,用起来极其繁琐,所以修改了原来的实现方式,重载父类的onMeasure和onLayout来实现父View的动态高度和子View的排版,实现结果和原先的差不多,修改后由于子View在外面用addView自己实现,所以不再局限于TextView。
接下来上代码:
AutoItemLayout:
package com.mine.mylibrary.viewutil;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import androidx.annotation.Nullable;
public class AutoItemLayout extends LinearLayout {
public AutoItemLayout(Context context) {
this(context, null);
}
public AutoItemLayout(Context con