知名网站设计电商运营转行后悔了
在 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.MetricAffectingSpanclass 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("")}// 创建 SpannableStringBuilderval 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}}