TextView显示Html(含超链接的点击事件和样式处理)

需求:注册时遇到用户名重复时,下方出现Html段落的方式提醒用户可以设置的用户名,点击可选用户名后将点击的
用户名设置进EditText并取消提醒界面

实现:
Spanned mSpanned =Html.fromHtml("该用户名已经被占用")+

我是可以使用的用户名,点击将我设置进EditText"; mTextView.setText(mSpanned );//设置html,带标签,此时可以显示html,但是超链接的点击事件和样式 未处理 //处理点击事件和样式 handleHtmlClickAndStyle(mContext,mTextView); private void handleHtmlClickAndStyle(Context context, TextView textview) { textview.setMovementMethod(LinkMovementMethod.getInstance());//需要处理点击得加这句 CharSequence text = textview.getText(); if (text instanceof Spannable) { Spannable sp = (Spannable) text; URLSpan[] oldUrlSpans = sp.getSpans(0, text.length(), URLSpan.class); SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(text); for (URLSpan oldUrlSpan: oldurlSpans) { //span 不能重复设置,需要先删除 spannableStringBuilder.removeSpan(oldUrlSpan); CustomURLSpan customURLSpan= new CustomURLSpan (context,oldUrlSpan.getURL()); spannableStringBuilder.setSpan(customURLSpan, sp.getSpanStart(oldUrlSpan), sp.getSpanEnd(oldUrlSpan), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); } tv.setText(style); } } 自定义CustomURLSpan,用来替换默认的URLSpan private class CustomURLSpan extends ClickableSpan { private Context mContext; private String mUrl; MyURLSpan(Context context,String url) { mUrl = url; mContext = context; } @Override public void onClick(View view) { //此处处理点击事件 mUrl 为标签的href属性 } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(Color.parseColor("#1e5494"));//设置文本颜色 ds.setUnderlineText(false);//取消下划线 } }复制代码


你可能感兴趣的:(TextView显示Html(含超链接的点击事件和样式处理))