Android 富文本 SpannableString的使用

 

先看一下要实现的效果

Android 富文本 SpannableString的使用_第1张图片

电话号码标红  并且可点击  

 直接上代码

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);
    }
}

 

你可能感兴趣的:(Android进阶,Android,富文本,SpannableString)