Android的strings.xml是res/values目录下的XML配置文件,主要用于集中管理应用中的所有字符串内容,避免硬编码字符串带来的维护成本高、多语言适配困难等问题。所有字符串资源都需要在resources根标签内定义,每个字符串对应一个唯一的name属性作为标识。

基础字符串资源定义
最基础的字符串定义只需要指定name和字符串内容,定义后可以在布局文件、Java或Kotlin代码中引用。定义普通字符串的示例如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 应用名称 -->
<string name="app_name">我的应用</string>
<!-- 登录按钮文本 -->
<string name="login_btn_text">登录</string>
<!-- 带特殊字符的字符串,需要转义 -->
<string name="tip_text">请先完成验证,否则无法继续&操作</string>
</resources>
在布局文件中引用字符串资源使用@string/字符串name的语法,比如给TextView设置文本:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/login_btn_text" />
在Kotlin代码中引用需要使用getString()方法,Java代码则使用getResources().getString()方法:
// Kotlin代码 val loginText = getString(R.string.login_btn_text) // Java代码 String loginText = getResources().getString(R.string.login_btn_text);
带参数的字符串定义与格式化
实际开发中经常需要定义带占位符的字符串,比如显示用户昵称、消息数量等动态内容,此时需要使用格式化占位符。Android支持两种常用的格式化方式,分别是Java风格的%s、%d占位符和Android特有的%1$s带索引占位符。
Java风格占位符
这种方式和Java的String.format()用法一致,占位符对应不同的数据类型:%s对应字符串,%d对应整数,%f对应浮点数。定义示例如下:
<resources>
<!-- 带字符串占位符 -->
<string name="welcome_msg">欢迎你,%s</string>
<!-- 带整数占位符 -->
<string name="unread_count">你有%d条未读消息</string>
<!-- 带多个占位符 -->
<string name="user_info">姓名:%s,年龄:%d</string>
</resources>
代码中使用的示例如下:
// 单个占位符格式化 val welcome = getString(R.string.welcome_msg, "张三") // 多个占位符按顺序传入参数 val userInfo = getString(R.string.user_info, "李四", 25)
带索引的占位符
当字符串中有多个相同类型的占位符,或者需要调整参数顺序时,可以使用带索引的占位符,格式为%索引$类型,索引从1开始。这种方式在需要复用参数或者做多语言适配时非常实用,比如有些语言的语序和中文不同,调整索引即可不用修改代码逻辑。
<resources>
<!-- 带索引的占位符,第一个参数是字符串,第二个是整数 -->
<string name="order_info">订单号:%1$s,商品数量:%2$d</string>
<!-- 复用同一个参数 -->
<string name="repeat_param">%1$s你好,%1$s的订单已发货</string>
</resources>
代码中使用时参数顺序和索引对应即可:
val orderInfo = getString(R.string.order_info, "20240501001", 3) val repeatText = getString(R.string.repeat_param, "王五")
HTML格式字符串的使用
如果字符串需要包含简单的HTML样式,比如加粗、斜体、字体颜色,可以直接在strings.xml中写入HTML标签,但是需要注意标签的转义规则,或者使用<![CDATA[ ]]>包裹避免转义问题。
<resources>
<!-- 使用转义后的HTML标签 -->
<string name="bold_text">这是<b>加粗</b>的文本</string>
<!-- 使用CDATA包裹,无需转义标签 -->
<string name="color_text"><![CDATA[这是<font color="#ff0000">红色</font>的文本]]></string>
</resources>
代码中如果需要让HTML样式生效,需要使用Html.fromHtml()方法转换后再设置给TextView:
val htmlText = getString(R.string.color_text) // 兼容不同版本,使用HtmlCompat val spannedText = HtmlCompat.fromHtml(htmlText, HtmlCompat.FROM_HTML_MODE_LEGACY) textView.text = spannedText
注意事项
- 字符串中的特殊字符比如
&、<、>必须进行转义,否则会导致XML解析错误。 - 不要在strings.xml中定义过长的字符串,过长的文本建议拆分或者使用assets目录下的文件存放。
- 多语言适配时,不同语言的strings.xml中字符串的name必须保持一致,占位符的数量和类型也要对应,避免出现格式化错误。
- 如果字符串不需要被翻译,可以添加
translatable="false"属性,比如应用名称、技术相关的固定文案。
合理使用strings.xml可以让应用的字符串管理更加规范,降低后续维护和多语言适配的成本,开发过程中建议养成所有字符串都放在strings.xml中的习惯,避免直接在代码或布局中硬编码字符串。
Androidstrings.xml字符串资源字符串格式化修改时间:2026-06-09 23:42:32