Android TextView文字的局部放大缩小以及上移的处理

先看图
这里写图片描述

今天碰到这个需求:小数点后如果是一位数字,则小数点前面数字方法,如果两位,则两位方法,如果三位,则最后一位缩小上为移,如果四位,则最后两位放大,如果五位置,和三位一样处理,一开始想用多个textview拼接实现,后面觉得太麻烦,因为服务器给回来的数据就是一大串,你要先进行format再一个个取位数?后面我看了下有人说用textview.settext(html.fromhtml(“sb“));来处理,但是问题是具体大小你怎么解决?恰好网页前端在我旁边,我就问他能不能这样搞,他说要搞一些css样式貌似不好办,但是ios可以办,最后我找到了这个资料,通过span进行处理,具体参考:https://www.cnblogs.com/qynprime/p/8026672.html

下面写下我自己的处理:

        //right
        SpannableString spannableString = new SpannableString(priceNumber);
        RelativeSizeSpan bigSizeSpan = new RelativeSizeSpan(1.6f);
        RelativeSizeSpan smallSizeSpan = new RelativeSizeSpan(0.8f);
        SuperscriptSpan superSpan = new SuperscriptSpan();
        superSpan.updateMeasureState(new TextPaint());
        superSpan.updateDrawState(new TextPaint());
        spannableString.setSpan(bigSizeSpan,priceNumber.indexOf(".")+1, priceNumber.indexOf(".")+price+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE  );
        spannableString.setSpan(smallSizeSpan, length-1, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE  );
        spannableString.setSpan(superSpan,length-1,length,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        tvPercentPrice.setText(spannableString);

        //left
        SpannableString spannableString2 = new SpannableString(buyPriceNumber);
        RelativeSizeSpan bigSizeSpan2 = new RelativeSizeSpan(1.6f);
        RelativeSizeSpan smallSizeSpan2 = new RelativeSizeSpan(0.8f);
        SuperscriptSpan superSpan2 = new SuperscriptSpan();
        superSpan.updateMeasureState(new TextPaint());
        superSpan.updateDrawState(new TextPaint());
        spannableString2.setSpan(bigSizeSpan2, buyPriceNumber.indexOf(".")+1, buyPriceNumber.indexOf(".")+price+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE  );
        spannableString2.setSpan(smallSizeSpan2, length-1, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE  );
        spannableString2.setSpan(superSpan2,length-1,length,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        icon_price.setText(spannableString2);

其中SuperscriptSpan 就是上移的样式,RelativeSizeSpan 就是可以设置大小倍数,两者一起用即可,注意这些下表都是从0开始数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值