zoukankan      html  css  js  c++  java
  • Android TextView 富文本SpannableString的使用

    效果如下:

    代码如下:

        @Override
        protected void initView() {
            mContext=this;
            //中等字体
            int middleFontSize = (int) Utils.sp2px(mContext,18);
            //小字体
            int smallFontSize = (int) Utils.sp2px(mContext,18);
            //红色 #F65236
            int colorRed = ContextCompat.getColor(mContext, R.color._ff4902);
            //灰色 #999999
            int textColorThird = ContextCompat.getColor(mContext, R.color._6389cc);
            //灰色 #999999
            int textColor36 = ContextCompat.getColor(mContext, R.color._363636);
            ClickableSpan clickableSpan=new ClickableSpan() {
                @Override
                public void onClick(View widget) {
                    Toast.makeText(TopicWorksInformationActivity.this, "展开", Toast.LENGTH_SHORT).show();
                }
                @Override
                public void updateDrawState(TextPaint ds) {
                    ds.setColor(textColor36);
                    ds.setUnderlineText(false);
                }
            };
    
            SpannableStringBuilder spanBuilder = new SpannableStringBuilder();
    
            String price = "¥189";
            int start = 0;
            int end = price.length();
            spanBuilder.append(price);
            //添加字体大小样式span
            spanBuilder.setSpan(new AbsoluteSizeSpan(middleFontSize), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            //添加文本颜色样式span
            spanBuilder.setSpan(new ForegroundColorSpan(colorRed), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    
            String priceUnit = "次/人";
            start = end;
            end += priceUnit.length();
            spanBuilder.append(priceUnit);
            spanBuilder.setSpan(new AbsoluteSizeSpan(smallFontSize), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            spanBuilder.setSpan(new ForegroundColorSpan(textColor36), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    
            String line = " - 原价¥";
            start = end;
            end += line.length();
            spanBuilder.append(line);
            spanBuilder.setSpan(new AbsoluteSizeSpan(smallFontSize), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            spanBuilder.setSpan(new ForegroundColorSpan(textColorThird), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    
            String originalPricePrefix = "199";
            start = end;
            end += originalPricePrefix.length();
            spanBuilder.append(originalPricePrefix);
            spanBuilder.setSpan(new AbsoluteSizeSpan(smallFontSize), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            spanBuilder.setSpan(new ForegroundColorSpan(textColorThird), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            //添加删除线样式span
            spanBuilder.setSpan(new StrikethroughSpan(), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    
            String zhankai = "  展开";
            start = end;
            end += zhankai.length();
            spanBuilder.append(zhankai);
            spanBuilder.setSpan(new AbsoluteSizeSpan(smallFontSize), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            spanBuilder.setSpan(new ForegroundColorSpan(textColor36), start, end, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            spanBuilder.setSpan(clickableSpan,start,end,Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    
    
    
            String kongge = " ";
            start = end;
            end += kongge.length();
            //获取一张图片
            Drawable drawable = this.getResources().getDrawable(R.mipmap.icon_skip);
            drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight());
            //居中对齐imageSpan
            CenterAlignImageSpan imageSpan = new CenterAlignImageSpan(drawable);
            spanBuilder.append(kongge);
            spanBuilder.setSpan(imageSpan,start,end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    
    
            //最终把SpannableStringBuilder设置给TextView
            tvSynopsis.setText(spanBuilder);
            tvSynopsis.setHighlightColor(Color.TRANSPARENT); //设置点击后的颜色为透明
    
            tvSynopsis.setMovementMethod(LinkMovementMethod.getInstance());
        }

  • 相关阅读:
    assign()与create()的区别
    ES6对象扩展——部分新的方法和属性
    ES6对象扩展——扩展运算符
    rest operater剩余操作符
    深拷贝和浅拷贝
    for in和for of的简单区别
    查询ES6兼容的网站
    ES6扩展——对象的扩展(简洁表示法与属性名表达式)
    滚动条设置样式
    marquee横向无缝滚动无js
  • 原文地址:https://www.cnblogs.com/lixiangyang521/p/13850764.html
Copyright © 2011-2022 走看看