package com.camnter.newlife.widget;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.util.AttributeSet;
import android.widget.TextView;
import com.camnter.newlife.bean.Tag;
import com.camnter.newlife.widget.span.ClickableSpanNoUnderline;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* Description:TagTextView
* Created by:CaMnter
* Time:2015-12-22 16:48
*/
public class TagTextView extends TextView {
private ClickableSpanNoUnderline.OnClickListener onTagClickListener;
public TagTextView(Context context) {
super(context);
}
public TagTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TagTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public TagTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
/**
* 添加标签ClickableSpan
*
* @param tags tags
* @param content content
* @return SpannableStringBuilder
*/
public SpannableStringBuilder addTagClickableSpan(ArrayList<Tag> tags, String content, ClickableSpanNoUnderline.OnClickListener onTagClickListener) {
this.onTagClickListener = onTagClickListener;
StringBuilder sbTag = new StringBuilder();
Map<String, Tag> content2TagDict = new HashMap<>();
/**
* 添加 #
*/
if (tags != null && tags.size() > 0) {
for (Tag tag : tags) {
sbTag.append("#");
sbTag.append(tag.getContent());
sbTag.append("#");
sbTag.append(" ");
content2TagDict.put(tag.getContent(), tag);
}
}
int tagLength = sbTag.toString().length();
sbTag.append(content);
/**
* 添加颜色
*/
SpannableStringBuilder sb = new SpannableStringBuilder(sbTag.toString());
if (tagLength > 0) {
String s = sb.toString();
String[] model = s.split("#");
for (int i = 0; i < model.length - 1; i++) {
/**
* 过滤 "" 和 " "
*/
if ("".equals(model[i]) || " ".equals(model[i])) continue;
int index = s.indexOf(model[i]);
int mLength = model[i].length();
TagClickableSpan span = new TagClickableSpan(0xffFF4081, this.onTagClickListener);
span.setContent(model[i]);
Tag tag = content2TagDict.get(model[i]);
if (tag != null && tag.getId() != null) {
span.setId(tag.getId());
}
/**
* 设置TagClickableSpan
*/
sb.setSpan(span, index - 1, index + mLength + 1,
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
}
}
return sb;
}
/**
* Tag ClickableSpan
*/
public class TagClickableSpan extends ClickableSpanNoUnderline {
private Long id;
private String content;
public TagClickableSpan(int color, OnClickListener onClickListener) {
super(color, onClickListener);
}
public TagClickableSpan(OnClickListener onClickListener) {
super(onClickListener);
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
}