如上图所示这两种效果,我想在大家开发过程中应该也会碰到。我这边写一个简单的实现效果供大家借鉴,或者有好的实现方法可以一起分享一下。
image文字显示不同大小功能实现:
图片.pngpublic 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
网友评论