java boxlayout 换行,继承FlexboxLayout自定义可自动换行的tag标签
实现效果如图:
通过继承自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标签相关推荐
- 继承FlexboxLayout自定义可自动换行的tag标签
实现效果如图: 通过继承自FlexboxLayout实现,Java代码: package org.test;import android.content.Context; import android ...
- java tld 方法重载_自定义标签
1.创建自定义标签的步骤 a)创建标签实现类 b)创建 .tbl 文件,在该文件中配置标签实现类 c)在 jsp 页面中使用指定标签实现类的配置文件 .tbl a) 创建标签实现类 1)实现Simpl ...
- Java学习---day07_继承及final、Object的介绍
Java学习-day07 简介: 在java中存在继承的思想,来提高代码的复用性,代码的拓展性. 程序中的继承,是类与类之间的特征和行为的一种赠予或获取.一个类可以将自己的属性和方法赠予其他的类,一个 ...
- 谁说 Java 不能多继承
从今以后,只要谁说Java不能多继承 我都会说,是的没错(秒怂) 要不你再看看标题写了啥? 没毛病啊,你说Java不能多继承,我也说Java不能多继承 这不是巧了么,没想到我们对一件事物的看法竟如此一 ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- java 的继承_关于java中的继承
我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...
- 零基础Java学习之继承
继承 继承的概述 继承的理解 继承的好处 继承的格式 继承的特点一:成员变量 私有化(private) 成员变量不重名 成员变量重名 继承的特点二:成员方法 成员方法不重名 成员方法重名--重写(Ov ...
- Java异常以及继承的一些问题
Java异常以及继承的一些问题 参考文章: (1)Java异常以及继承的一些问题 (2)https://www.cnblogs.com/rookieJW/p/8059864.html 备忘一下.
- java容器类的继承结构
摘要: java容器类的继承结构 Java容器类库定义了两个不同概念的容器,Collection和Map Collection 一个独立元素的序列,这些元素都服从一条或多条规则.List必须按照插入的 ...
- java自学手记——继承
java面向对象三大特点封装.继承和多态.继承作为三大特点之一,主要是为了实现多态的,即多态的前提条件是继承.代码示例: 1 class Person{ 2 String name; 3 String ...
最新文章
- python中排序英文单词怎么写_Python实现对文件进行单词划分并去重排序操作示例...
- Open3D点云处理算法最全合集
- optee HSM的实现
- MySQL5.7.17的简单配置文件
- 22 PP配置-生产车间控制-定义工单类型
- 深度剖析Java数据结构之队列(一)——双端队列(ArrayDeque)
- 查看sql语句执行时间/测试sql语句性能
- Windows10三月更新后,电脑打印文件时蓝屏解决方案
- 这一次,话筒给你:向自由软件之父 Richard M. Stallman 提问啦!
- C#—软件注册与注册机
- 阿里云香港云服务器ECS适合什么场景?
- Flutter Navigator路由传参
- 浅谈JAVA中Calendar类FirstDayOfWeek的问题
- 搭建hadoop集群从裸机开始
- 疑难杂症、易混淆、易遗忘的知识点记录
- 你所不知的米聊和微信的前身——酷啦啦
- flask+gunicorn部署
- c语言程序设计勘误,C语言程序设计勘误表.doc
- 《数理天地》期刊简介及投稿邮箱
- 华为交换机修改telnet接口号
热门文章
- 【电力负荷预测】基于matlab粒子群算法优化支持向量机预测电力负荷【含Matlab源码 1225期】
- 【模拟信号】基于matlab调相信号产生+解调【含Matlab源码 987期】
- 【图像压缩】基于matlab小波变换图像压缩【含Matlab源码 879期】
- 【TSP】基于matlab蚁群算法求解76城市旅行商问题【含Matlab源码 409期】
- 【雷达通信】基于matlab GUI雷达定位模拟【含Matlab源码 304期】
- .21f## c语言,C++核心准则编译边学-F.21 如果需要返回多个输出值,最好返回结构......
- 硕士转行学python_0基础转行编程学习Python是最快的途径吗?
- 算法偏见是什么_人工智能中的偏见有什么作用?
- Mybatis Sql 大于号小于号不兼容
- orm php 自定义,Eloquent ORM 自定义 builder