该篇简单的示例如何使用ClickableSpan
如果需要详细封装方法,请关注下一篇
MyClickSpan .java文件
import android.graphics.Color;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.view.View;
public class MyClickSpan extends ClickableSpan {
private int mHighLightColor = Color.RED;
private boolean mUnderLine = false;
private View.OnClickListener mClickListener;
public MyClickSpan(View.OnClickListener listener)
{
this.mClickListener = listener;
}
public MyClickSpan(int color, boolean underline, View.OnClickListener listener)
{
this.mHighLightColor = color;
this.mUnderLine = underline;
this.mClickListener = listener;
}
@Override
public void onClick(View widget)
{
if (mClickListener != null)
mClickListener.onClick(widget);
}
@Override
public void updateDrawState(TextPaint ds)
{
ds.setColor(mHighLightColor);
ds.setUnderlineText(mUnderLine);
}
}
public static void setTextHighLightWithClick(TextView tv, String text, String keyWord, View.OnClickListener listener)
{
tv.setClickable(true);
tv.setHighlightColor(Color.TRANSPARENT);
tv.setMovementMethod(LinkMovementMethod.getInstance());
SpannableString s = new SpannableString(text);
Pattern p = Pattern.compile(keyWord);
Matcher m = p.matcher(s);
while (m.find())
{
int start = m.start();
int end = m.end();
s.setSpan(new MyClickSpan(listener), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(s);
}
setTextHighLightWithClick(tv, "已经同步至服务器,忽略该请求", "请求", new View.OnClickListener() {
@Override
public void onClick(View view) {
// to do
}
});