单个占位符使用
%d %后边d表示数字类型,常见的数据类型有%s字符串类型、%f浮点类型
<string name="match_picture_count">人脸识别匹配的照片数量为:%d张</string>
代码中引用
String text = String.format(getString(R.match_picture_count),6)//传入一个整型
多个占位符使用
%1$s %后边数字1表示第1个占位符,$后边s表示数据类型,填写参数时按数据类型顺序填写
<string name="play_user_photo_tip">检测到昵称为%1$s的用户,%2$d秒后开始播放%3$s的相册\n若点击取消按钮,则暂时关闭人脸识别。</string>
// 从资源获取字体大小
int pixelSize = getResources().getDimensionPixelSize(R.dimen.enrollment_sp48);
// 第一个参数:包含占位符字符串
// 第二个可变参数:替换字符串的占位符,按数据类型填写,不然会报错
String playUserPhotoTip = String.format(getString(R.string.play_user_photo_tip), mUser.getName(), tick,
mUser.getName());
int index = playUserPhotoTip.indexOf(String.valueOf(tick));
// 字体颜色
ColorStateList redColors = ColorStateList.valueOf(Color.WHITE);
// 使文本以指定的字体、大小、样式和颜色绘制。0表示使用默认的大小和字体
TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan(null, 0, pixelSize, redColors, null);
// 使用SpannableStringBuilder设置字体大小和颜色
SpannableStringBuilder spanBuilder = new SpannableStringBuilder(playUserPhotoTip);
// Parameters: what start 起始 end 结束 flags
/*
* Spanable中的常用常量: Spanned.SPAN_EXCLUSIVE_EXCLUSIVE --- 不包含头和尾
* Spanned.SPAN_EXCLUSIVE_INCLUSIVE --- 不包含头但包含尾
* Spanned.SPAN_INCLUSIVE_EXCLUSIVE --- 包含头但不包含尾
* Spanned.SPAN_INCLUSIVE_INCLUSIVE--- 包含头和包含尾
*/
spanBuilder.setSpan(textAppearanceSpan, index, index + 1, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
mWindowMessage.setText(spanBuilder);
效果显示