在安卓TextView中穿插其他字体风格或不同颜色,通过SpannerString,SpannableStringBuilder来设置,鸿蒙中使用方案如下:
RichTextBuilder builder = new RichTextBuilder();
//设置字体不同颜色
builder.mergeForm(new TextForm().setTextSize(textSize).setTextColor(defaultColor));
builder.addText("设置字体颜色的方式");
builder.revertForm();
//设置字体带删除线
builder.mergeForm(new TextForm().setTextSize(20).setTextColor(Color.BLACK.getValue()));
builder.mergeForm(new TextForm().setScaleX(1.5f).setStrikethrough(true));
builder.addText("Scale X1.5 带删除线");
builder.revertForm();
//设置红色背景
builder.mergeForm(new TextForm().setTextBackgroundColor(Color.RED.getValue()));
builder.addText("设置红色背景");
builder.revertForm();
//设置下划线1.5倍字体大小
builder.mergeForm(new TextForm().setUnderline(true).setRelativeTextSize(1.5f));
builder.addText("下划线1.5倍字体大小");
builder.revertForm();
//设置上标
builder.mergeForm(new TextForm().setSuperscript(true));
builder.addText("字体上标");
builder.revertForm();
//设置下标
builder.mergeForm(new TextForm().setSubscript(true));
builder.addText("字体下标");
builder.revertForm();
RichText richText = builder.build();
//Text组件设置风格
text.setRichText(richText);
以上是设置字体风格的例子。下面展示一个demo,功能是字体穿插颜色。
效果如图:
/**
* 给字体穿插上色
*
* @param str1 列表中某一项字符串
* @param str2 搜索的字符
* @param defaultColor 默认的颜色
* @param highlightColor 红色
* @param textSize 字体大小
* @return 封装好的颜色字体
*/
public static RichTextBuilder highLightLCS(
String str1, String str2, int defaultColor, int highlightColor, int textSize) {
String lcs = str2.toLowerCase(Locale.ROOT);
String tLower = str1.toLowerCase(Locale.ROOT);
RichTextBuilder builder = new RichTextBuilder();
int defaultFlag = 0;
int flag = -1;
for (int i = 0; i < tLower.length() && lcs.length() > 0; i++) {
if (tLower.charAt(i) == lcs.charAt(0)) {
lcs = lcs.substring(1);
flag = i;
if (flag - defaultFlag != 0) {
String strStart = str1.substring(defaultFlag, flag);
builder.mergeForm(new TextForm().setTextSize(textSize).setTextColor(defaultColor));
builder.addText(strStart);
builder.revertForm();
}
String strLast = str1.substring(flag, flag + 1);
builder.mergeForm(new TextForm().setTextSize(textSize).setTextColor(highlightColor));
builder.addText(strLast);
builder.revertForm();
flag = flag + 1;
defaultFlag = flag;
}
}
if (flag != -1 && defaultFlag != 0 && defaultFlag != str1.length()) {
String strEnd = str1.substring(defaultFlag, str1.length());
builder.mergeForm(new TextForm().setTextSize(textSize).setTextColor(defaultColor));
builder.addText(strEnd);
builder.revertForm();
}
return builder;
}