INDUSTRY INFORMATION

新闻资讯

当前位置:首页 > 新闻中心

在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局

发布时间:2020·02·03 浏览:2033

在日常的app使用中,我们会在android 的app中看见 热门标签等自动换行的流式布局,今天,我们就来看看如何自定义一个类似热门标签那样的流式布局。下面我们就来详细介绍流式布局的应用特点以及用的的技术点。
1.流式布局的特点以及应用场景

        特点:当上面一行的空间不够容纳新的TextView时候,才开辟下一行的空间。
原理图:
在这里插入图片描述
场景:主要用于关键词搜索或者热门标签等场景
2.自定义ViewGroup

(1)onMeasure:测量子view的宽高,设置自己的宽和高
(2)onLayout:设置子view的位置
        onMeasure:根据子view的布局文件中属性,来为子view设置测量模式和测量值
测量=测量模式+测量值;
测量模式有3种:
        EXACTLY:表示设置了精确的值,一般当childView设置其宽、高为精确值、match_parent时,ViewGroup会将其设置为EXACTLY;
        AT_MOST:表示子布局被限制在一个较大值内,一般当childView设置其宽、高为wrap_content时,ViewGroup会将其设置为AT_MOST;
        UNSPECIFIED:表示子布局想要多大就多大,一般出现在AadapterView的item的heightMode中、ScrollView的childView的heightMode中;此种模式比较少见。
(3)LayoutParams
        ViewGroup LayoutParams :每个 ViewGroup 对应一个 LayoutParams; 即 ViewGroup -> LayoutParams
        getLayoutParams 不知道转为哪个对应的LayoutParams ,其实很简单,就是如下:
        子View.getLayoutParams 得到的LayoutParams对应的就是 子View所在的父控件的LayoutParams;
        例如,LinearLayout 里面的子view.getLayoutParams ->LinearLayout.LayoutParams
所以 咱们的FlowLayout 也需要一个LayoutParams,由于上面的效果图是子View的 margin,
所以应该使用MarginLayoutParams。即FlowLayout->MarginLayoutParams
3.代码

FlowLayoutView

/**
 * Created by zzs on 20/01/16.
 * 流式布局
 */
public class FlowLayoutView extends ViewGroup{
    public FlowLayoutView(Context context) {
        super(context);
    }

    public FlowLayoutView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

      //或ViewGroup中所有子元素的属性
    //否则只获取ViewGroup 的属性
    @Override
    public LayoutParams generateLayoutParams(AttributeSet attrs) {

上一篇: Linux os Nginx 配置https 自定义端口非443端口

下一篇: Windows上VSCode+Flutter、Dart安装配置(详细版+安装问题处理)

推荐案例
推荐新闻