
image
如上圖所示這兩種效果,我想在大家開(kāi)發(fā)過(guò)程中應(yīng)該也會(huì)碰到。我這邊寫(xiě)一個(gè)簡(jiǎn)單的實(shí)現(xiàn)效果供大家借鑒,或者有好的實(shí)現(xiàn)方法可以一起分享一下。

image
文字顯示不同大小功能實(shí)現(xiàn):

圖片.png
public class TextPriceFormatUtils {
/**
* 小數(shù)點(diǎn)前后大小不一致
*
* @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;
}
}
上面這個(gè)封裝的utils大家可以再加一些參數(shù),比如大小文字,字號(hào)比例大小,上面代碼中的0.77f是項(xiàng)目中3980字段為18sp,小數(shù)點(diǎn)后00為14sp。
沒(méi)錯(cuò)實(shí)現(xiàn)主要是通過(guò)SpannableString ,那么就很有必要了解Spanned幾種類(lèi)型的區(qū)別了
Spanned的flag一般有以下四種:
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE — 不包含兩端start和end所在的端點(diǎn)
Spanned.SPAN_EXCLUSIVE_INCLUSIVE — 不包含端start,但包含end所在的端點(diǎn)
Spanned.SPAN_INCLUSIVE_EXCLUSIVE — 包含兩端start,但不包含end所在的端點(diǎn)
Spanned.SPAN_INCLUSIVE_INCLUSIVE— 包含兩端start和end所在的端點(diǎn)
最后textview設(shè)置:
SpannableString spannableString = TextPriceFormatUtils.format("¥3980.00");
textview.setText(spannableString);
文字中間橫線功能實(shí)現(xiàn):

圖片.png
上面這個(gè)就比較簡(jiǎn)單了:
textview.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG);
一行代碼搞定。。。
不過(guò)一些常用的paint的flag還是有必要了解一下的:
Paint.ANTI_ALIAS_FLAG :抗鋸齒標(biāo)志
Paint.UNDERLINE_TEXT_FLAG : 下劃線
Paint.STRIKE_THRU_TEXT_FLAG : 中劃線
Paint.FAKE_BOLD_TEXT_FLAG : 加粗
至此,完成了我們想要的效果。
原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處:http://www.itdecent.cn/p/613c0d80d49b