您的位置:首页 > 移动开发 > Android开发

Android 富文本 SpannableString的使用

2017-08-17 17:08 204 查看

先看一下要实现的效果



电话号码标红  并且可点击  

 直接上代码

String pre = "已经过物流地址,由快递员派dfkasdfljasldf送,派送电话:";
holder.tvContent.setText(pre);
final String endStr = "1234567890";
SpannableString spanStr = new SpannableString(endStr);
spanStr.setSpan(new ClickableSpan() {

@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(activity.getResources().getColor(R.color.f_red_text));//设置字体颜色
ds.setUnderlineText(false);//设置是否有下划线
//别的属性可以自行添加
}

@Override
public void onClick(View widget) {
ToastUtil.showShort(endStr);
}
}, 0, endStr.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

holder.tvContent.append(spanStr);
holder.tvContent.setMovementMethod(LinkMovementMethod.getInstance());//开始响应点击事件


setSpan方法

int start:开始应用指定Span的位置,索引从0开始
int end:结束应用指定Span的位置,特效并不包括这个位置。比如如果这里数为3(即第4个字符),第4个字符不会有任何特效。从下面的例子也可以看出来。
int flags:取值有如下四个
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:不包括start、end位置,即start、end位置不会应用设置的样式。
Spannable.SPAN_EXCLUSIVE_INCLUSIVE :不包括start位置,包括end位置。即start位置不会应用设置的样式,end位置应用设置的样式。
Spannable.SPAN_INCLUSIVE_EXCLUSIVE :包括start位置,不包括end位置。即start位置会应用设置的样式,end位置不会应用设置的样式。
Spannable.SPAN_INCLUSIVE_INCLUSIVE :包括start、end位置,即start、end位置都会应用设置的样式。


还借鉴了一篇 虽然没用上  但是比较详细

private void addUrlSpan() {
SpannableString spanString = new SpannableString("超链接");
URLSpan span = new URLSpan("tel:0123456789");
spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append(spanString);
}

private void addBackColorSpan() {
SpannableString spanString = new SpannableString("文字背景颜色");
BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW);
spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append(spanString);
}

private void addForeColorSpan() {
SpannableString spanString = new SpannableString("文字前景颜色");
ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE);
spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append(spanString);
}

private void addFontSpan() {
SpannableString spanString = new SpannableString("36号字体");
AbsoluteSizeSpan span = new AbsoluteSizeSpan(36);
spanString.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append(spanString);
}

private void addStyleSpan() {
SpannableString spanString = new SpannableString("BIBI");
StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);//加粗
spanString.setSpan(span, 0, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append(spanString);
}

private void addStrikeSpan() {
SpannableString spanString = new SpannableString("删除线");
StrikethroughSpan span = new StrikethroughSpan();
spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append(spanString);
}

private void addUnderLineSpan() {
SpannableString spanString = new SpannableString("下划线");
UnderlineSpan span = new UnderlineSpan();
spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append(spanString);
}

//图片
private void addImageSpan() {
SpannableString spanString = new SpannableString(" ");
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.append(spanString);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息