dev api host -> 3.6.1

光环助手V3.6.1-消息中心优化(测试未通过)  https://gitlab.ghzhushou.com/pm/halo-app-issues/issues/435
This commit is contained in:
kehaoyuan
2019-01-22 19:17:08 +08:00
parent 4979045be2
commit 479ef20859
15 changed files with 393 additions and 117 deletions

View File

@ -0,0 +1,132 @@
package com.gh.common.view;
import android.content.Context;
import android.graphics.Color;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.TextUtils;
import android.text.style.ClickableSpan;
import android.util.AttributeSet;
import android.view.View;
import com.lightgame.utils.Utils;
import java.util.ArrayList;
import java.util.List;
public class MessageSpannableTextView extends android.support.v7.widget.AppCompatTextView {
private OnSpannableClickListener mSpannableClickListener;
private final String mStartMarkKey = "{{";
private final String mEndMarkKey = "}}";
private List<MarkData> mMarkList;
public MessageSpannableTextView(Context context) {
super(context);
}
public MessageSpannableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
mMarkList = new ArrayList<>();
}
@Override
public void setText(CharSequence text, BufferType type) {
if (TextUtils.isEmpty(text) ||
!text.toString().contains(mStartMarkKey) && !text.toString().contains(mEndMarkKey)) {
super.setText(text, type);
return;
}
// todo bug 详情见 UnitTest->regex
mMarkList.clear();
String[] split = text.toString().split("\\}\\}");
StringBuilder builder = new StringBuilder();
for (String s : split) {
int i = s.lastIndexOf(mStartMarkKey);
if (i != -1) {
MarkData markData = new MarkData();
String substring = s.substring(i);
String content = s.replace(substring, "");
builder.append(content);
markData.setStart(builder.length());
String key = substring.replace(mStartMarkKey, " ") + " ";
builder.append(key);
markData.setEnd(builder.length());
markData.setKey(key);
mMarkList.add(markData);
System.out.println(substring);
System.out.println(s);
}
}
SpannableStringBuilder msp = new SpannableStringBuilder(builder);
for (MarkData markData : mMarkList) {
msp.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.YELLOW);
ds.setUnderlineText(false);
}
@Override
public void onClick(View widget) {
if (mSpannableClickListener != null) {
mSpannableClickListener.onClick(markData.getKey());
}
Utils.toast(getContext(), markData.key);
}
}, markData.getStart(), markData.getEnd(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
super.setText(msp, type);
setMovementMethod(CustomLinkMovementMethod.getInstance());
}
public void setOnSpannableClickListener(OnSpannableClickListener spannableClickListener) {
this.mSpannableClickListener = spannableClickListener;
}
public interface OnSpannableClickListener {
void onClick(String spannableText);
}
class MarkData {
private int start;
private int end;
private String key;
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
}