Android Spannable 千变 TextView

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_15609303/article/details/102497632

Spannable / 富文本的用途是丰富 Android TextView 的表现形式,如修改同一主体中某一部分文字的颜色、大小、样式、添加超链接以及添加图标,使得 TextView 功能与表现形式更强大!

以下为笔者部分实现,更多请移步Google官方资料

在这里插入图片描述


Spannable / 富文本的实现

ForegroundColorSpan 修改前景色
在这里插入图片描述

RelativeSizeSpan 修改文字大小(相对)
在这里插入图片描述

StyleSpan 修改字体风格
在这里插入图片描述

StrikethroughSpan / UnderlineSpan 添加中划线、下划线
在这里插入图片描述

ImageSpan 添加图标
在这里插入图片描述

SuperscriptSpan / SubscriptSpan 添加上、下标
在这里插入图片描述

URLSpan 添加超链接
在这里插入图片描述


完整源码
    // 修改颜色
    private void initSpan01(){
        mSpItem01 = (TextView) findViewById(R.id.sp_item01);
        SpannableString spStr = new SpannableString(mSpItem01.getText());
        ForegroundColorSpan span = new ForegroundColorSpan(Color.parseColor("#436EEE"));
        spStr.setSpan(span, 9,12, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        mSpItem01.setText(spStr);
    }

    // 修改大小
    private void initSpan02(){
        mSpItem02 = (TextView) findViewById(R.id.sp_item02);
        SpannableString spStr = new SpannableString(mSpItem02.getText());
        RelativeSizeSpan span = new RelativeSizeSpan(1.5f);
        spStr.setSpan(span, 12,14, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        mSpItem02.setText(spStr);
    }

    // 修改样式
    private void initSpan03(){
        mSpItem03 = (TextView) findViewById(R.id.sp_item03);
        SpannableString spStr = new SpannableString(mSpItem03.getText());
        // 以修改为粗体为例,具体提供多少种样式可查看Typeface源码
        StyleSpan span = new StyleSpan(Typeface.BOLD);
        spStr.setSpan(span, 9,12, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        mSpItem03.setText(spStr);
    }

    // 添加线条(span可以叠加添加,以下为添加中划线+下划线两种)
    private void initSpan04(){
        mSpItem04 = (TextView) findViewById(R.id.sp_item04);
        SpannableString spStr = new SpannableString(mSpItem04.getText());
        // 中划线
        StrikethroughSpan strikeSpan = new StrikethroughSpan();
        spStr.setSpan(strikeSpan, 9,12, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        // 下划线
        UnderlineSpan underSpan = new UnderlineSpan();
        spStr.setSpan(underSpan, 12,14, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        mSpItem04.setText(spStr);
    }

    // 文末添加图标
    private void initSpan05(){
        mSpItem05 = (TextView) findViewById(R.id.sp_item05);
        SpannableString spStr = new SpannableString("占位");
        Drawable imageDrawable = this.getResources().getDrawable(R.drawable.robot_text_to_voicre);
        imageDrawable.setBounds(0,0,50,50);
        ImageSpan span = new ImageSpan(imageDrawable);
        spStr.setSpan(span, 0 ,2, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        mSpItem05.append(spStr);
    }

    // 上、下标(span可以叠加添加,以下为添加上标+标两种)
    private void initSpan06(){
        mSpItem06 = (TextView) findViewById(R.id.sp_item06);
        SpannableString spStr = new SpannableString(mSpItem06.getText());
        // 上标
        SuperscriptSpan supSpan = new SuperscriptSpan();
        spStr.setSpan(supSpan, 9 ,10, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        // 下标
        SubscriptSpan subSpan = new SubscriptSpan();
        spStr.setSpan(subSpan, 12 ,13, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        mSpItem06.setText(spStr);
    }

    // 超链接
    private void initSpan07(){
        mSpItem07 = (TextView) findViewById(R.id.sp_item07);
        SpannableString spStr = new SpannableString(mSpItem07.getText());
        URLSpan span = new URLSpan("https://www.jianshu.com/p/b865915dea14");
        spStr.setSpan(span, 12 ,spStr.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        mSpItem07.setMovementMethod(LinkMovementMethod.getInstance());
        mSpItem07.setHighlightColor(Color.parseColor("#36969696"));
        mSpItem07.setText(spStr);
    }


猜你喜欢

转载自blog.csdn.net/qq_15609303/article/details/102497632