实现效果如图:

通过继承自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 mTexts;

private List 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 texts, @Nullable List 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的上下左右的margin

layoutParams.setMargins(0, 1, 5, 1);

this.addView(textView, layoutParams);

}

this.invalidate();

}

//绘制圆角描边的TextView

private TextView makeTextView(String s, Integer c) {

TextView textView = new TextView(mContext);

textView.setText(s);

textView.setPadding(10, 5, 10, 5);

int strokeWidth = 5; // 5px

int roundRadius = 15; // 15px

int 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布局:

android:id="@+id/tag_group"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

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

TagGroup tagGroup = findViewById(R.id.tag_group);

List texts = Arrays.asList("zhang", "phil", "csdn", "android", "zhang", "phil", "csdn", "android", "zhang", "phil", "csdn", "android");

List 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);

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

  1. 继承FlexboxLayout自定义可自动换行的tag标签

    实现效果如图: 通过继承自FlexboxLayout实现,Java代码: package org.test;import android.content.Context; import android ...

  2. java tld 方法重载_自定义标签

    1.创建自定义标签的步骤 a)创建标签实现类 b)创建 .tbl 文件,在该文件中配置标签实现类 c)在 jsp 页面中使用指定标签实现类的配置文件 .tbl a) 创建标签实现类 1)实现Simpl ...

  3. Java学习---day07_继承及final、Object的介绍

    Java学习-day07 简介: 在java中存在继承的思想,来提高代码的复用性,代码的拓展性. 程序中的继承,是类与类之间的特征和行为的一种赠予或获取.一个类可以将自己的属性和方法赠予其他的类,一个 ...

  4. 谁说 Java 不能多继承

    从今以后,只要谁说Java不能多继承 我都会说,是的没错(秒怂) 要不你再看看标题写了啥? 没毛病啊,你说Java不能多继承,我也说Java不能多继承 这不是巧了么,没想到我们对一件事物的看法竟如此一 ...

  5. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  6. java 的继承_关于java中的继承

    我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...

  7. 零基础Java学习之继承

    继承 继承的概述 继承的理解 继承的好处 继承的格式 继承的特点一:成员变量 私有化(private) 成员变量不重名 成员变量重名 继承的特点二:成员方法 成员方法不重名 成员方法重名--重写(Ov ...

  8. Java异常以及继承的一些问题

    Java异常以及继承的一些问题 参考文章: (1)Java异常以及继承的一些问题 (2)https://www.cnblogs.com/rookieJW/p/8059864.html 备忘一下.

  9. java容器类的继承结构

    摘要: java容器类的继承结构 Java容器类库定义了两个不同概念的容器,Collection和Map Collection 一个独立元素的序列,这些元素都服从一条或多条规则.List必须按照插入的 ...

  10. java自学手记——继承

    java面向对象三大特点封装.继承和多态.继承作为三大特点之一,主要是为了实现多态的,即多态的前提条件是继承.代码示例: 1 class Person{ 2 String name; 3 String ...

最新文章

  1. python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...
  2. Open3D点云处理算法最全合集
  3. optee HSM的实现
  4. MySQL5.7.17的简单配置文件
  5. 22 PP配置-生产车间控制-定义工单类型
  6. 深度剖析Java数据结构之队列(一)——双端队列(ArrayDeque)
  7. 查看sql语句执行时间/测试sql语句性能
  8. Windows10三月更新后,电脑打印文件时蓝屏解决方案
  9. 这一次,话筒给你:向自由软件之父 Richard M. Stallman 提问啦!
  10. C#—软件注册与注册机
  11. 阿里云香港云服务器ECS适合什么场景?
  12. Flutter Navigator路由传参
  13. 浅谈JAVA中Calendar类FirstDayOfWeek的问题
  14. 搭建hadoop集群从裸机开始
  15. 疑难杂症、易混淆、易遗忘的知识点记录
  16. 你所不知的米聊和微信的前身——酷啦啦
  17. flask+gunicorn部署
  18. c语言程序设计勘误,C语言程序设计勘误表.doc
  19. 《数理天地》期刊简介及投稿邮箱
  20. 华为交换机修改telnet接口号

热门文章

  1. 【电力负荷预测】基于matlab粒子群算法优化支持向量机预测电力负荷【含Matlab源码 1225期】
  2. 【模拟信号】基于matlab调相信号产生+解调【含Matlab源码 987期】
  3. 【图像压缩】基于matlab小波变换图像压缩【含Matlab源码 879期】
  4. 【TSP】基于matlab蚁群算法求解76城市旅行商问题【含Matlab源码 409期】
  5. 【雷达通信】基于matlab GUI雷达定位模拟【含Matlab源码 304期】
  6. .21f## c语言,C++核心准则编译边学-F.21 如果需要返回多个输出值,最好返回结构......
  7. 硕士转行学python_0基础转行编程学习Python是最快的途径吗?
  8. 算法偏见是什么_人工智能中的偏见有什么作用?
  9. Mybatis Sql 大于号小于号不兼容
  10. orm php 自定义,Eloquent ORM 自定义 builder