一、概述
Android自定义View实现标签流效果,一行放不下时会自动换行,用户可以自己定义单个标签的样式,可以选中和取消,可以监听单个标签的点击事件,功能还算强大,可以满足大部分开发需求,值得推荐,效果图如下:
二、实现代码
1.自定义View
定义属性文件
<declare-styleable name="FlowTagView">
<attr name="lineSpacing" format="dimension" />
<attr name="tagSpacing" format="dimension" />
<!-- 是否是固定布局 -->
<attr name="isFixed" format="boolean" />
<attr name="columnSize" format="integer" />
</declare-styleable>
FlowTagConfig.java
package com.czhappy.effectdemo.flowtag;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import com.czhappy.effectdemo.R;
/**
* Description:
* User: chenzheng
* Date: 2017/2/17 0017
* Time: 10:23
*/
public class FlowTagConfig {
private static final int DEFAULT_LINE_SPACING = 5;//默认行间距
private static final int DEFAULT_TAG_SPACING = 10;//各个标签之间的默认距离
private static final int DEFAULT_FIXED_COLUMN_SIZE = 3; //默认列数
private int lineSpacing;
private int tagSpacing;
private int columnSize;
private boolean isFixed;
public FlowTagConfig(Context context,AttributeSet attrs){
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FlowTagView);
try {
lineSpacing = a.getDimensionPixelSize(R.styleable.FlowTagView_lineSpacing, DEFAULT_LINE_SPACING);
tagSpacing = a.getDimensionPixelSize(R.styleable.FlowTagView_tagSpacing, DEFAULT_TAG_SPACING);
columnSize = a.getInteger(R.styleable.FlowTagView_columnSize, DEFAULT_FIXED_COLUMN_SIZE);
isFixed = a.getBoolean(R.styleable.FlowTagView_isFixed,false);
} finally {
a.recycle();
}
}
public int getLineSpacing() {
return lineSpacing;
}
public void setLineSpacing(int lineSpacing) {
this.lineSpacing = lineSpacing;
}
public int getTagSpacing() {
return tagSpacing;
}
public void setTagSpacing(int tagSpacing) {
this.tagSpacing = tagSpacing;
}
public int getColumnSize() {
return columnSize;
}
public void setColumnSize(int columnSize) {
this.columnSize = columnSize;
}
public boolean isFixed() {
return isFix