<string name="xxx"> 的复杂用法:格式化及使用html标签
1.官方文档:
https://developer.android.com/guide/topics/resources/string-resource
2.格式化字符串
2.1 示例
<resources>
<string name="app_name">DataBind</string>
<string name="format">format : name=%1$s,age=%2$1d,value=%3$32f </string>
<string name="int_format1">111 -> \%%#-8X value = %1$#-8X </string>
<string name="int_format2">111 -> \%%d value = %1$d </string>
<string name="int_format3">111 -> \%%o value = %1$o </string>
<string name="int_format4">111 -> \%%u 不支持 </string>
<string name="float_format1">11.777777f -> \%%3f value = %1$3f </string>
<string name="float_format2">11.777777f -> \%%f value = %1$f </string>
<string name="float_format3">11.777777f -> \%%#e value = %1$#E </string><!--#无效-->
<string name="float_format4">11.777777f -> \%%g value = %1$G </string>
<string name="char_format1"> \%%-5c\'A\' -> \%%5c value = %1$-5c </string>
<string name="char_format2">\"world\" -> \%%s value = %1$s </string>
</resources>
结果如下:
2.2 语法格式
[ % + 第几个参数(从1开始) + $ + # (显示 + 空格补齐位数(小于实参则忽略,正数左补,负数右补) + 格式字符 ]
如: %1$#-8X 其中:
- 1 表示第1个参数
- # 显示进制符号
- -8 右边补齐空格至8位(不足8位则补空格,实参位数大于8则不补)
- X 表示16进制数
2.3 支持的格式化符号
格式字符 | 描述 |
d | 以十进制形式输出带符号整数(正数不输出符号) |
o | 以八进制形式输出无符号整数(不输出前缀0) |
x,X | 以十六进制形式输出无符号整数(不输出前缀Ox) |
f | 以小数形式输出单、双精度实数 |
e,E | 以指数形式输出单、双精度实数 |
g,G | 以%f或%e中较短的输出宽度输出单、双精度实数 |
c | 输出单个字符 |
s | 输出字符串 |
格式符号 u 表示以十进制形式输出无符号整数. 目前不支持
2.4 使用
- 在代码中
var text = getString(R.string.format, "李4",23,333.333333f)
- 在数据绑定中使用
<TextView android:id="@+id/tvFormat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:text='@{@string/format("李4",0x20,33.333333f),default=@string/format}' app:layout_constraintStart_toStartOf="@+id/feature_edt" app:layout_constraintTop_toBottomOf="@+id/features_txt1" />
3. 使用 HTML 标记设置样式
3.1 示例
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="welcome">Welcome to <b>Android</b>!</string>
</resources>
3.2 支持以下 HTML 元素
- 粗体:<b>、<em>
- 斜体:<i>、<cite>、<dfn>
- 文本放大 25%:<big>
- 文本缩小 20%:<small>
- 设置字体属性:<font face=”font_family“ color=”hex_color”>。可能的字体系列示例包括
monospace
、serif
和sans_serif
。 - 设置等宽字体系列:<tt>
- 删除线:<s>、<strike>、<del>
- 下划线:<u>
- 上标:<sup>
- 下标:<sub>
- 列表标记:<ul>、<li>
- 换行符:<br>
- 区隔标记:<div>
- CSS 样式:<span style=”color|background_color|text-decoration”>
- 段落:<p dir=”rtl | ltr” style=”…”>
3.3 用法
源串(下例中的username,mailCount)中没有html字符
val text: String = getString(R.string.welcome_messages, username, mailCount)
val styledText: Spanned = Html.fromHtml(text, FROM_HTML_MODE_LEGACY)
如果上面代码中的username中含有html字符,要先html编码它。
val escapedUsername: String = TextUtils.htmlEncode(username)
val text: String = getString(R.string.welcome_messages, escapedUsername, mailCount)
val styledText: Spanned = Html.fromHtml(text, FROM_HTML_MODE_LEGACY)