一、前言:
需求:java 字符串中的数字变红和加粗
效果图:
图片.png
二、实现
1、调用:
//设置不同的颜色
SpannableStringBuilder spannableStringBuilder = SpannableUtils.INSTANCE.getSpannableStringBuilder(activity, title,22);
viewHolder.tv_tip.setText(spannableStringBuilder);
2、工具类:
/**
* @author lyy
* @date 2023-01-19
* 首充0.99返1000书币
* context:上下文
* content:内容
* typeface:字体大小
*/
object SpannableUtils {
fun getSpannableStringBuilder(
context: Context,
content: String? = null,
typeface:Int
): SpannableStringBuilder? {
content?.let {
val regEx = "[^0-9.]+"
val pattern = Pattern.compile(regEx)
//用定义好的正则表达式拆分字符串,把字符串中的数字留出来
val result = pattern.split(it)
val style = SpannableStringBuilder(it)
result.forEach { tag ->
if (!tag.isNullOrEmpty()) {
var start = it.indexOf(tag)
//字体大小
style.setSpan(
AbsoluteSizeSpan(typeface.sp),
start,
start + tag.length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
//字体颜色
style.setSpan(
ForegroundColorSpan(context.resources.getColor(R.color.Orgin2)),
start,
start + tag.length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
//字体加粗
style.setSpan(
StyleSpan(Typeface.BOLD),
start,
start + tag.length,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
}
}
return style
}
return null
}
}
3、扩展类
/**
* 正常编码中一般只会用到 [dp]/[sp] ;
* 其中[dp]/[sp] 会根据系统分辨率将输入的dp/sp值转换为对应的px
*/
val Float.dp: Float // [xxhdpi](360 -> 1080)
get() = android.util.TypedValue.applyDimension(
android.util.TypedValue.COMPLEX_UNIT_DIP, this, Resources.getSystem().displayMetrics
)
val Int.dp: Int
get() = android.util.TypedValue.applyDimension(
android.util.TypedValue.COMPLEX_UNIT_DIP,
this.toFloat(),
Resources.getSystem().displayMetrics
).toInt()
val Float.sp: Float // [xxhdpi](360 -> 1080)
get() = android.util.TypedValue.applyDimension(
android.util.TypedValue.COMPLEX_UNIT_SP, this, Resources.getSystem().displayMetrics
)
val Int.sp: Int
get() = android.util.TypedValue.applyDimension(
android.util.TypedValue.COMPLEX_UNIT_SP,
this.toFloat(),
Resources.getSystem().displayMetrics
).toInt()
网友评论