public abstract class TopicSpanWrapper extends ClickableSpan {
protected Context mContext;
protected TextView mTextView;
/**
* @param context
* @param tv
*/
public TopicSpanWrapper(Context context, TextView tv) {
mContext = context;
mTextView = tv;
updateClickSpan(tv);
}
/**
* 更新Span
*
* @param tv
*/
public void updateClickSpan(TextView tv) {
// 这里拼接超链接, 我在前后加了一个井号,可自行去除
//String htmlLinkText = "<a href='这里可以填写某个url'>#" + tv.getText().toString() + "#</a>";
String htmlLinkText = "<a href='这里可以填写某个url'>" + tv.getText().toString() + "</a>";
tv.setText(Html.fromHtml(htmlLinkText));
tv.setMovementMethod(LinkMovementMethod.getInstance());
CharSequence text = tv.getText();
if (text instanceof Spannable) {
int end = text.length();
Spannable sp = (Spannable) tv.getText();
URLSpan[] urls = sp.getSpans(0, end, URLSpan.class);
SpannableStringBuilder style = new SpannableStringBuilder(text);
style.clearSpans(); // should clear old spans
for (URLSpan url : urls) {
// 设置Span
style.setSpan(this, sp.getSpanStart(url), sp.getSpanEnd(url),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
tv.setText(style);
}
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
// 去掉超链接的下划线
ds.setUnderlineText(false);
}
}
效果图如下:
具体使用:
在使用页面加入以下代码即可实现
//将TextView中的文本包装成可点击的超链接,txtPdf为TextView控件
new TopicSpanWrapper(this,txtPdf){
@Override
public void onClick(View widget) {
Intent intent=new Intent();
intent.setClass(PVMainActivity.this, PdfView.class);
startActivity(intent);
//Toast.makeText(getApplicationContext(),"点击了链接",Toast.LENGTH_SHORT).show();
}
};