<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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?