修改Textview中第一个字的字体,避免某些机型人民币¥不显示
在 Android 中,系统提供了三种常用的字体类型,分别是:
-
Serif(衬线字体):
- 这种字体有明显的衬线或笔画末端装饰,通常用于印刷品和书籍,给人一种正式和优雅的感觉。
- 示例:
Typeface.SERIF
-
Sans Serif(无衬线字体):
- 这种字体没有衬线,线条更简单、更干净,通常用于数字界面,因其可读性较高而被广泛使用。
- 示例:
Typeface.SANS_SERIF
-
Monospace(等宽字体):
- 在这种字体中,每个字符占据相同的水平空间,通常用于代码编辑器、终端窗口和计算机编程,因为它可以让对齐代码变得更加容易。
- 示例:
Typeface.MONOSPACE
默认字体通常是 Sans Serif 。部分设备默认字体无法显示人民币¥的符号(即使使用半角)
此时尝试修改字体,使得符号能够展现
val text = "¥9.0元"
if (Build.MODEL == "xxx"){
mTv.text = TypefaceChangeUtils().getTypefaceText(text, 0, 1, Typeface.MONOSPACE)
}else{
mTv.text = text
}
import android.graphics.Typeface
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.TextPaint
import android.text.style.MetricAffectingSpan
class TypefaceChangeUtils {
fun getTypefaceText(text: CharSequence, start: Int, end: Int, typeface: Typeface) : CharSequence{
if (text.isNullOrBlank()){
return SpannableStringBuilder("")
}else if (start < 0 || end > text.length || start > end){
return SpannableStringBuilder("")
}
// 创建 SpannableStringBuilder
val builder = SpannableStringBuilder(text)
// 将第一个字符设置为 Monospace 字体
// Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 表示当改变文本时,该样式不会向前或向后扩展。
builder.setSpan(object : MetricAffectingSpan() {
override fun updateDrawState(tp: TextPaint) {
tp.typeface = typeface
}
override fun updateMeasureState(paint: TextPaint) {
paint.typeface = typeface
}
}, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
return builder
}
}
原文地址:https://blog.csdn.net/vistaup/article/details/144142274
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!