需求:注册时遇到用户名重复时,下方出现Html段落的方式提醒用户可以设置的用户名,点击可选用户名后将点击的
用户名设置进EditText并取消提醒界面
实现:
Spanned mSpanned =Html.fromHtml("<big><font color='#FF0000'>该用户名已经被占用</font></big>")+
<br><a href='url_username'>我是可以使用的用户名,点击将我设置进EditText</a>";
mTextView.setText(mSpanned );//设置html,带<a>标签,此时可以显示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 为<a>标签的href属性
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#1e5494"));//设置文本颜色
ds.setUnderlineText(false);//取消下划线
}
}复制代码
TextView显示Html(含超链接的点击事件和样式处理)
最新推荐文章于 2022-07-18 11:13:40 发布