安卓开发Android 开发技术分享

textview文字显示不同大小,中间带横线等功能实现

2019-10-24  本文已影响0人  徐子念
image

如上图所示这两种效果,我想在大家开发过程中应该也会碰到。我这边写一个简单的实现效果供大家借鉴,或者有好的实现方法可以一起分享一下。

image

文字显示不同大小功能实现:

图片.png
public class TextPriceFormatUtils {


    /**
     * 小数点前后大小不一致
     *
     * @param value
     * @return
     */
    public static SpannableString format(String value) {

        if (TextUtils.isEmpty(value)) {
            return new SpannableString(value);
        }
        if (!value.contains("¥")) {
            value = "¥" + value;
        }
        SpannableString spannableString = new SpannableString(value);
        if (value.contains(".")) {
            spannableString.setSpan(new RelativeSizeSpan(0.77f), value.indexOf("."), value.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }

        if (value.contains("¥")) {
            spannableString.setSpan(new RelativeSizeSpan(0.77f), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        }

        return spannableString;
    }
}

上面这个封装的utils大家可以再加一些参数,比如大小文字,字号比例大小,上面代码中的0.77f是项目中3980字段为18sp,小数点后00为14sp。

没错实现主要是通过SpannableString ,那么就很有必要了解Spanned几种类型的区别了

Spanned的flag一般有以下四种:

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE — 不包含两端start和end所在的端点
Spanned.SPAN_EXCLUSIVE_INCLUSIVE — 不包含端start,但包含end所在的端点
Spanned.SPAN_INCLUSIVE_EXCLUSIVE — 包含两端start,但不包含end所在的端点
Spanned.SPAN_INCLUSIVE_INCLUSIVE— 包含两端start和end所在的端点

最后textview设置:

 SpannableString spannableString = TextPriceFormatUtils.format("¥3980.00");
 textview.setText(spannableString);

文字中间横线功能实现:

图片.png

上面这个就比较简单了:

textview.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);

一行代码搞定。。。
不过一些常用的paint的flag还是有必要了解一下的:

Paint.ANTI_ALIAS_FLAG :抗锯齿标志
Paint.UNDERLINE_TEXT_FLAG : 下划线
Paint.STRIKE_THRU_TEXT_FLAG : 中划线
Paint.FAKE_BOLD_TEXT_FLAG : 加粗

至此,完成了我们想要的效果。

原创,转载请注明出处:https://www.jianshu.com/p/613c0d80d49b

上一篇 下一篇

猜你喜欢

热点阅读