spannableString使用

项目中有个需求,需要对一句话中的部分字体加粗。于是查到了spannableString可以实现这个需求。

主要是spannableString中的setSpan方法,四个can参数分别为:

1,文本所要使用的资源(可以是字体大小,颜色,样式,超链接,下划线等)

2,应用该资源的文本的起始位置

3,应用该资源的文本的结束位置(含前不含后,java的范围设置基本都是含前不含后)

4,只有四种,由exclusive和incluesive组合而成,exclusive:独立的  inclusive:包含的 。比如

SPAN_EXCLUSIVE_INCLUSIVE,则是前面不应用该样式,后面的应用,因为“EXCLUSIVE_INCLUSIVE”前面是exclusive,hou'后面是“inclusive”。

具体代码如下:

     SpannableString spannableString = new SpannableString("红色打电话斜体下划线图片变大变小注释");
        
        //颜色标记文本
        spannableString.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        
        //超链接标记文本 还需要设置 tx.setMovementMethod(LinkMovementMethod.getInstance()); 不然不会跳到拨号界面
        spannableString.setSpan(new URLSpan("tel:13810220405"), 2, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //设置部分文本点击事件 还需要设置 tx.setMovementMethod(LinkMovementMethod.getInstance());
        spannableString.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                Toast.makeText(MainActivity.this, "打电话", Toast.LENGTH_SHORT).show();
            }
        }, 2, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //用样式标记文本(斜体)
        spannableString.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //用下划线标记文本
        spannableString.setSpan(new UnderlineSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        //获取Drawable资源
        Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
        d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        //创建ImageSpan
        ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
        //用ImageSpan替换文本
        spannableString.setSpan(span, 10, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

        //变粗
        spannableString.setSpan(new AbsoluteSizeSpan(20, true), 12, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //变细
        spannableString.setSpan(new AbsoluteSizeSpan(10, true), 14, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        //修改背景颜色
        spannableString.setSpan(new BackgroundColorSpan(Color.GREEN), 12, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        
        tx.setMovementMethod(LinkMovementMethod.getInstance());//不加这句设置的部分文本点击事件将不触发
        
        tx.setText(spannableString);

 

你可能感兴趣的:(android杂项)