实现效果如图:

通过继承自FlexboxLayout实现,Java代码:

package org.test;import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;import com.google.android.flexbox.FlexDirection;
import com.google.android.flexbox.FlexWrap;
import com.google.android.flexbox.FlexboxLayout;
import com.google.android.flexbox.JustifyContent;import java.util.ArrayList;
import java.util.List;public class TagGroup extends FlexboxLayout {private List<String> mTexts;private List<Integer> mColors;private Context mContext;private int TAG_VIEW_COUNT = 0;public TagGroup(Context context, AttributeSet attrs) {super(context, attrs);mContext = context;init();}private void init() {mTexts = new ArrayList<>();mColors = new ArrayList<>();this.setFlexDirection(FlexDirection.ROW);this.setJustifyContent(JustifyContent.FLEX_START);this.setFlexWrap(FlexWrap.WRAP);}public void setTagView(@NonNull List<String> texts, @Nullable List<Integer> colors) {if (texts == null || texts.size() == 0) {throw new RuntimeException("tag view文本字段不能为空");}this.mTexts = texts;TAG_VIEW_COUNT = texts.size();if (colors == null || colors.size() == 0) {for (int i = 0; i < TAG_VIEW_COUNT; i++) {mColors.clear();mColors.add(Color.WHITE);}} else {this.mColors = colors;}this.removeAllViews();for (int i = 0; i < TAG_VIEW_COUNT; i++) {TextView textView = makeTextView(mTexts.get(i), mColors.get(i));LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);//设置每一个子View在整体布局中与其他子View的上下左右的marginlayoutParams.setMargins(0, 1, 5, 1);this.addView(textView, layoutParams);}this.invalidate();}//绘制圆角描边的TextViewprivate TextView makeTextView(String s, Integer c) {TextView textView = new TextView(mContext);textView.setText(s);textView.setPadding(10, 5, 10, 5);int strokeWidth = 5; // 5pxint roundRadius = 15; // 15pxint strokeColor = Color.GRAY;int fillColor = c;GradientDrawable gd = new GradientDrawable();gd.setColor(fillColor);gd.setCornerRadius(roundRadius);gd.setStroke(strokeWidth, strokeColor);textView.setBackground(gd);return textView;}
}

使用方式,把TagGroup当作一个普通布局使用,写入xml布局:

    <org.test.TagGroupandroid:id="@+id/tag_group"android:layout_width="match_parent"android:layout_height="wrap_content" />

然后在上层,通过set方式,添加子tag标签实现:

        TagGroup tagGroup = findViewById(R.id.tag_group);List<String> texts = Arrays.asList("zhang", "phil", "csdn", "android", "zhang", "phil", "csdn", "android", "zhang", "phil", "csdn", "android");List<Integer> colors = Arrays.asList(Color.RED, Color.DKGRAY, Color.BLUE, Color.RED, Color.DKGRAY, Color.BLUE, Color.RED, Color.DKGRAY, Color.BLUE, Color.RED, Color.DKGRAY, Color.BLUE);tagGroup.setTagView(texts, colors);

继承FlexboxLayout自定义可自动换行的tag标签相关推荐

  1. OneNav一为主题魔改教程(四):自定义网址内容页的Tag标签到任意位置--洞五洞洞幺

    今日主题: 自定义网址内容页的Tag标签到任意位置 声明:本篇有违"魔改"这个标题:修改之前做好笔记或备份. 在原WebStackPro的版本中, 内容页中的Tag标签块紧帖着简介 ...

  2. Spring自定义tag标签及使用

    tag文件和jsp很相似,也有不同,tag文件只是以tag为后缀名的文本文件.除了jsp页面指令外,其他jsp元素都可以出现在tag文件中.jsp的指令有include,taglib和page,但ta ...

  3. elementUI table自定义表头弹框搜索,排序,显示tag标签

    elementUI table自定义表头弹框搜索,排序,显示tag标签 允许一种排序,多种搜索条件 包括三种类别,添加了solt插槽,也可以自定义: 输入框[input] 多选[checkbox] 范 ...

  4. 自定义添加关键词Tag标签jquery插件

    下载地址 一款点击添加关键词Tag标签jquery插件,此款jquery插件不仅可以自定义输入关键词标签,还可以展开选择已有关键词标签,当关键词标签内容比较多时可以点击换一换来切换下一页 dd:

  5. html 自定义标签 seo,wordpress深层seo优化:自定义栏目和tag标签页面title标题

    seo注重整站优化,也就是希望网站每个页面都参与进来,每个页面都有不同的title标题不重复.对于wordpress默认设置来说,这个基本上是ok的,不需要怎么折腾.但碰到一个问题是:网站栏目及标签页 ...

  6. 自定义TAG标签页面聚合

    TAG标签是一种由用户自己定义的,比分类更准确.更具体,可以概括文章主要内容的关键词,TAG标签一般出现在我们首页的侧栏中,将我们已经有排名的网页通过TAG标签进行聚合,可以提高页面的权重,通过超链接 ...

  7. Kotlin 第一弹:自定义 ViewGroup 实现流式标签控件

    古人学问无遗力, 少壮工夫老始成.纸上得来终觉浅, 绝知此事要躬行. – 陆游 <冬夜读书示子聿> 上周 Google I/O 大会的召开,宣布了 Kotlin 语言正式成为了官方开发语言 ...

  8. 针对CMS中的tag标签理解

    针对CMS的tag标签有以下解释: 什么tag标签? TAG标签是一种由自定义的一种标签,要比分类更加的准确,可以概括文章主要内容的关键词. 运用TAG标签,可以使网站的文章更容易被搜索引擎检索到.百 ...

  9. 标签系统mysql设计_关于tag标签系统的实现

    实验室的项目,需要做对用户发布的主题进行打标签的功能,纠结甚久,实现思路如下: 一.数据库表的设计 1.tag表 create table qa_tag ( tag_id int primary ke ...

最新文章

  1. 安徽师范大学信息计算机学院,安徽师范大学数学计算机科学学院导师介绍:罗永龙...
  2. 【NLP_Stanford课堂】正则表达式
  3. java课程总结_java课程总结报告.doc
  4. 孤傲授权系统网站源码
  5. 软件工程需求分析文档模板
  6. Extjs4.1.1视频教程下载
  7. 联想U310刷白名单更换无线网卡纪实
  8. 知识竞赛软件/答题系统/答题小程序
  9. java 间接引用_Java中的四种引用方式的区别
  10. Bootstrap系列之工具提示框(Tooltips)
  11. 摘 :史丰收快速计算法的口诀及其简单应用方法(部分)
  12. fastlane二开java_Fastlane 使用手册(二)
  13. 文明5 java 英_文明5模组“Future Worlds”(未来世界)中英版补丁
  14. contest3 CF994 div2 ooxxx? oooox? ooooo?
  15. 三层交换 VLAN 互访配置
  16. Kali Linux实战:如何一下看出Windows计算机是否开启445危险端口?是否存在永恒之蓝漏洞?
  17. 智慧城市建设中 网络安全攻防战如何打赢?
  18. 成都物韵电子商务有限公司推广网店需要注意什么?
  19. 第一天:django+vue项目立项
  20. [欣赏]——天长地久

热门文章

  1. 神经网络词向量模型之Word2Vec
  2. vantUi密码框密码显示与隐藏(密文/明文)
  3. 基于深度学习的图像分割
  4. 2019.1.20【NOIP提高组】模拟B组 JZOJ 4230 淬炼神体
  5. 如果你还不懂会员管理系统,那还做什么实体零售
  6. 《网络编程综合实践》:高校爬虫(厦大,南理,华大)
  7. Android 推送 整合小米、个推、jpush
  8. 服务器如何安装宝塔面板?宝塔面板安装教程
  9. python将一个文件夹下图片按比例分在两个文件夹下
  10. 小白笔记【一】|实验室服务器使用