SpannableString定制文本

SpannableString其实和String一样,都是一种字符串类型,SpannableString可以直接作为TextView的显示文本,不同的是SpannableString可以通过使用其方法setSpan方法实现字符串各种形式风格的显示,重要的是可以指定设置的区间,也就是为字符串指定下标区间内的子字符串设置格式。

setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,what表示设置的格式是什么,可以是前景色、背景色也可以是可点击的文本等等,start表示需要设置格式的子字符串的起始下标,同理end表示终了下标,flags属性就有意思了,共有四种属性:

Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标
Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,同时包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,但都不包括起

 SpannableString spannableString = new SpannableString("设置文字的前景色为淡蓝色");
        ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#0099ee"));
        spannableString.setSpan(colorSpan, 9, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView1.setText(spannableString);


        SpannableString spannableString2 = new SpannableString("设置文字的背景色为淡绿色");
        BackgroundColorSpan colorSpan2 = new BackgroundColorSpan(Color.parseColor("#AC00FF30"));
        spannableString2.setSpan(colorSpan2, 9, spannableString2.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView2.setText(spannableString2);


        SpannableString spannableString3 = new SpannableString("哈哈哈哈哈哈哈哈哈哈哈");
        RelativeSizeSpan sizeSpan1 = new RelativeSizeSpan(1.0f);
        RelativeSizeSpan sizeSpan2 = new RelativeSizeSpan(1.2f);
        RelativeSizeSpan sizeSpan3 = new RelativeSizeSpan(1.4f);
        RelativeSizeSpan sizeSpan4 = new RelativeSizeSpan(1.6f);
        RelativeSizeSpan sizeSpan5 = new RelativeSizeSpan(1.8f);
        spannableString3.setSpan(sizeSpan1, 0, 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        spannableString3.setSpan(sizeSpan2, 1, 2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        spannableString3.setSpan(sizeSpan3, 2, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        spannableString3.setSpan(sizeSpan4, 3, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        spannableString3.setSpan(sizeSpan5, 4, 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView3.setText(spannableString3);


        SpannableString spannableString4 = new SpannableString("为文字设置删除线");
        StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
        spannableString4.setSpan(strikethroughSpan, 5, spannableString4.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView4.setText(spannableString4);


        SpannableString spannableString5 = new SpannableString("为文字设置下划线");
        UnderlineSpan underlineSpan = new UnderlineSpan();
        spannableString5.setSpan(underlineSpan, 5, spannableString5.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView5.setText(spannableString5);


        SpannableString spannableString6 = new SpannableString("为文字设置上标");
        SuperscriptSpan superscriptSpan = new SuperscriptSpan();
        spannableString6.setSpan(superscriptSpan, 5, spannableString6.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView6.setText(spannableString6);


        SpannableString spannableString7 = new SpannableString("为文字设置下标");
        SubscriptSpan subscriptSpan = new SubscriptSpan();
        spannableString7.setSpan(subscriptSpan, 5, spannableString7.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView7.setText(spannableString7);


        SpannableString spannableString8 = new SpannableString("在文本中添加表情(表情)");
        Drawable drawable = ContextCompat.getDrawable(this, R.mipmap.ic_launcher);
        drawable.setBounds(0, 0, 42, 42);
        ImageSpan imageSpan = new ImageSpan(drawable);
        spannableString8.setSpan(imageSpan, 6, 8, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView8.setText(spannableString8);


        SpannableString spannableString9 = new SpannableString("为文字设置点击事件");
        ClickableSpan clickableSpan = new ClickableSpan() {

            @Override
            public void updateDrawState(TextPaint ds) {
                ds.setUnderlineText(false);//不显示下划线
            }

            @Override
            public void onClick(View widget) {
                Toast.makeText(SimpleSpannableActivity.this, "点击", Toast.LENGTH_SHORT).show();
            }
        };
        spannableString9.setSpan(clickableSpan, 5, spannableString9.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        textView9.setMovementMethod(LinkMovementMethod.getInstance());//必须实现点击事件
        textView9.setHighlightColor(Color.parseColor("#ff00ff00"));
//        textView9.setHintTextColor(Color.parseColor("#ff00ff00"));
        textView9.setText(spannableString9);


        SpannableString spannableString10 = new SpannableString("为文字设置超链接");
        URLSpan urlSpan = new URLSpan("http://www.baidu.com") {
            @Override
            public void onClick(View widget) {
                super.onClick(widget);//可以重写URLSpan点击事件
            }
        };
        spannableString10.setSpan(urlSpan, 5, spannableString10.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        textView10.setMovementMethod(LinkMovementMethod.getInstance());
        textView10.setHighlightColor(Color.parseColor("#ff00ff00"));
        textView10.setText(spannableString10);

猜你喜欢

转载自blog.csdn.net/qq_14876133/article/details/81019084