- android
- android.accessibilityservice
- android.accounts
- android.content
- android.database.sqlite
- android.graphics
- android.location
- android.media
- android.net
- android.os
- android.text
- android.view
- android.view.inputmethod
- android.widget
- AbsListView
- AbsoluteLayout
- AbsSeekBar
- AbsSpinner
- AdapterView
- AnalogClock
- BaseAdapter
- BaseExpandableListAdapter
- Button
- CheckBox
- CheckedTextView
- Checkable
- Chronometer
- CompoundButton
- CursorAdapter
- CursorTreeAdapter
- DatePicker
- DialerFilter
- DigitalClock
- EditText
- Filter
- Filter.FilterListener
- Filter.FilterResults
- ExpandableListAdapter
- Filterable
- Gallery
- Gallery.LayoutParams
- GridView
- GridLayout
- RadioGroup
- ImageView
- HorizontalScrollView
- ImageButton
- ImageSwitcher
- FilterQueryProvider
- ListAdapter
- ListView
- MediaController
- QuickContactBadge
- RadioButton
- RatingBar
- RelativeLayout
- RemoteViews
- ResourceCursorAdapter
- ResourceCursorTreeAdapter
- Scroller
- ScrollView
- SearchView
- SeekBar
- SeekBar.OnSeekBarChangeListener
- SimpleAdapter
- SimpleCursorAdapter
- SimpleCursorTreeAdapter
- SimpleExpandableListAdapter
- SlidingDrawer
- Spinner
- SpinnerAdapter
- WrapperListAdapter
- TabHost
- TabHost.TabSpec
- TextView
- TimePicker
- Toast
- TableLayout
- TableRow
- TableRow.LayoutParams
- TabWidget
- TextSwitcher
- ToggleButton
- TwoLineListItem
- VideoView
- ViewAnimator
- ViewFlipper
- ViewSwitcher
- ZoomButtonsController
- ZoomButton
- ZoomControls
- dalvik.system
字符串资源
字符串资源
译者微博: http://weibo.com/popapa
版本:Android 4.0 r1
原文
http://developer.android.com/guide/topics/resources/string-resource.html
字符串资源
string 资源为应用程序提供字符串文本,并可附带文本样式和格式。有以下三种类型的 string 资源可供应用程序使用:
提供单个字符串的 XML 资源。
提供字符串数组的 XML 资源。
保存单词或词组各种数量形式(单数/复数)下的字符串 XML 资源。
所有字符串都能应用各种样式标记及格式参数。样式化和格式化串的信息请参阅章节格式化和样式 化。
能被应用程序或者其他资源文件(比如 layout XML)引用的单个字符串。
注意 :字符串是简单类型资源,是用名称(name)(而非 XML 文件名)来直接引用的。因此,在一个 XML 文件里,可以把字符串资源和其他简单类型资源一起放在一个<resources>元素下。
文件位置
res/values/ filename .xml
文件名可随意指定。<string>元素的 name 将被用作资源 ID。
编译后资源的数据类型
指向 String
的资源指针。
资源引用
Java 代码::R.string. string_name
XML 代码:@string/ string_name
语法
<?xml version="1.0" encoding="utf-8"?> <resources> <string name=" string_name "> text_string < / string> </resources> |
元素
<resources>
必填项 。必须是根元素。
无属性。
<string>
可以包含样式标记的字符串。注意须对单引号或双引号进行转义。更多信息请参阅下文格式化和样式 化。
属性:
name
String 类型。 字符串的名称。此名称将作为资源 ID 用于引用此字符串。
示例
保存在 res/values/strings.xml 的 XML 文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello!</string> </resources> |
以下布局(layout)XML 将字符串资源用于 View:
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text =" @string/hello " /> |
以下应用程序代码读取一个字符串资源:
String string = getString (R.string.hello); |
可以用 getString(int)
或 getText(int)
来读取字符串资源, getText(int)
会一并读取应用于字符串的 rich text 样式。
可被应用程序引用的字符串数组。
注意 :字符串数组是简单类型资源,是用名称(而非 XML 文件名)来直接引用的。因此,在一个 XML 文件里,可以把字符串数组资源和其他简单类型资源一起放入一个<resources>元素下。
文件位置
res/values/ filename .xml
文件名可随意指定。<string-array>元素的名字 name 将被用作资源 ID。
编译后资源的数据类型
指向 String
数组的资源指针。
资源引用
Java 代码::R.array. string_array_name
语法
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name=" string_array_name "> <item > text_string </item> </string-array> </resources> |
元素
必填项 。必须是根元素。
无属性。
定义一个字符串数组。包含了一个或多个<item>元素。
属性:
Name
String 类型。 字符串数组的名称。此名称将作为资源 ID 用于引用此数组。
<item>
一个字符串,可以包含样式标识。可以是对其他字符串资源的引用。必须作为<string-array>元素的子元素存在。注意对单引号和双引号须进行转义。有关如何正确地样式化及格式化字符串,请参阅下文格式化和样式 化。
无属性。
示例
保存在 res/values/strings.xml 的 XML 文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="planets_array"> <item>Mercury</item></string-array> <item>Venus</item> <item>Earth</item> <item>Mars</item> </string-array> </resources> |
以下程序代码返回字符串数组:
Resources res = getResources() ; String[] planets = res. getStringArray (R.array.planets_array); |
不同的语言对数量进行描述的语法规则也不同。比如在英语里,数量 1 是个特殊情况,我们写成“1 book”,但其他任何数量都要写成“ n books”。这种单复数之间的区别是很普遍的,不过其他语言会有更好的区分方式。Android 支持的全集包括 zero、one、 two、few、many 和 other。
决定选择和使用某种语言和复数的规则是非常复杂的,所以 Android 提供了诸如 getQuantityString() 的方法来选择合适的资源。
注意,要按照语法规则来建立可选项。在英语里,即使数量为 0,字符串零(zero)也不需要建立。因为 0 在英语语法表达上和 2 没有区别,和其他除 1 以外的任何数字都没有差别("zero books", "one book", "two books",等等)。 不要被“two 听起来似乎只能用于数量 2” 样的事误导。某语言可能需要 2、12、102(等等)和 1 一样形式表示,而又与其他数的形式都不同。请依靠翻译人员来了解一下实际语言中的差别。
如果和应用程序的风格一致,常可以用诸如“Books: 1”的模糊数量形式来避免使用数量字符串。这会让你和翻译人员都轻松些。
注意: 复数字符串是简单类型资源,是用名称(name)(而不是 XML 文件名)来直接引用的。因此,在一个 XML 文件里,可以把复数字符串资源和其他简单类型资源一起放在一个<resources>元素下。
文件位置
res/values/ filename .xml
文件名可随意指定。<plurals>元素的名字 name 将被用作资源 ID。
资源引用
Java 代码::R.plurals. plural_name
语法
<?xml version="1.0" encoding="utf-8"?> <resources> < plurals name=" plural_name "> <item_plurals quantity=["zero" | "one" | "two" | "few" | "many" | "other"] > text_string </item> </plurals> </resources> |
元素
必填项 。必须是根元素。
无属性。
一个字符串集,每个数量表示提供一个字符串。包含一个或多个<item>元素。
属性:
name
String 类型。 字符串对的名称。此名称将作为资源 ID。
一个单数或复数形式的字符串。可以是对其他字符串资源的引用。必须作为<plurals>元素的子元素存在。注意须对单引号和双引号进行转义。有关如何正确地样式化及格式化字符串,请参阅下文格式化和样式 化。
属性:
quantity
关键字 。 表示要使用此字符串的数量值。以下是合法的值(括号内列出部分语言要求):
值 | 描述 |
zero | 语言需要对数字 0 进行特殊处理。(比如阿拉伯语) |
one | 语言需要对类似 1 的数字进行特殊处理。(比如英语和其它大多数语言里的 1;在俄语里,任何以 1 结尾但不以 11 结尾的数也属于此类型。) |
two | 语言需要对类似 2 的数字进行特殊处理。(比如威尔士语) |
few | 语言需要对较小数字进行特殊处理(比如捷克语里的 2、3、4;或者波兰语里以 2、3、4 结尾但不是 12、13、14 的数。) |
many | 语言需要对较大数字进行特殊处理(比如马耳他语里以 11-99 结尾的数) |
other | 语言不需要对数字进行特殊处理。 |
示例
存放在 res/values/strings.xml 的 XML 文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <plurals name="numberOfSongsAvailable"> <item quantity="one">One song found.</item> <item quantity="other">%d songs found.</item> </plurals> </resources> |
存放在 res/values-pl/strings.xml 的 XML 文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <plurals name="numberOfSongsAvailable"> <item quantity="one">Znaleziono jedną piosenkę.</item> <item quantity="few">Znaleziono %d piosenki.</item> <item quantity="other">Znaleziono %d piosenek.</item> </plurals> </resources> |
Java 代码:
int count = getNumberOfsongsAvailable(); Resources res = getResources() ; String songsFound = res. getQuantityString (R.plurals.numberOfSongsAvailable, count, count); |
在使用 getQuantityString() 方法时,如果字符串包含数字 格式化串 ,则需要传递 2 个 count 参数。例如:对于字符串“%d songs found”,第一个 count 参数选择合适的复数字符串,第二个 count 参数插入占位符%d 中。如果复数字符串资源不包含格式化信息,就不需要给 getQuantityString() 传递第三个参数。
关于如何格式化和样式化字符串资源,下面这些比较重要的地方应该了解。
单引号和双引号的转义
如果字符串里包含单引号或双引号,必须进行转义,或者把整个串封闭在与当前引号不同的成对的引号内。下面是一些有效或无效的字符串示例:
<string name="good_example">"This'll work"</string> <string name="good_example_2">This\'ll also work</string> <string name="good_example_2">This\'ll also work</string> <string name="bad_example">This doesn't work</string> <string name="bad_example_2">XML encodings don’t work</string> |
字符串的格式化
如果需要使用 String.format(String, Object...) 格式化字符串,可以把格式化参数放在字符串(string)资源里。比如存在以下资源:
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string> |
此例中存在两个参数:%1$s 是个字符串,%2$d 是个数字。则在应用程序中可以用如下方式用参数来格式化字符串:
Resources res = getResources() ; String text = String. format (res.getString(R.string.welcome_messages), username, mailCount); |
用 HTML 标记来样式化
可以用 HTML 标记来为字符串加入样式。例如:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="welcome">Welcome to <b>Android</b>!</string> </resources> |
支持以下 HTML 元素:
· <b>文本加粗 bold 。
· <i>文本变斜体 italic 。
· <u>文本加下划线underline。
有时可能要创建一个样式化的文本资源,并可作为格式化串使用。通常这不能生效,因为 String.format(String, Object...) 方法会去除字符串内的所有的样式信息。解决方法是写入一段转义后的 HTML 标记,然后在格式化后再用 fromHtml(String) 恢复出这些样式。例如:
1. 将样式化的文本资源存储为转义后的 HTML 字符串:
<resources> <string name="welcome_messages">Hello, %1$s! You have <b>%2$d new messages</b>.</string> </resources> |
在这个格式化字符串里,加入了一个<b>元素。注意左尖括号是用标记< 转义过的 HTML。
2. 然后,按照通常方式格式化字符串,并调用 fromHtml(String) 把 HTML 文本转换成带样式的文本。
Resources res = getResources() ; String text = String. format (res.getString(R.string.welcome_messages), username, mailCount); CharSequence styledText = Html.fromHtml(text); |
因为 fromHtml(String) 方法会格式化所有的 HTML 内容,所以要确保用 htmlEncode(String) 对带格式化文本的字符串内所有可能的 HTML 字符进行转义。比如,如果要把可能包含诸如“<”或“&”等字符的串作为参数传给 String.format() ,那么必须在格式化之前对这些字符进行转义。格式化后,再把字符串传入 fromHtml(String) ,这些特殊字符就能还原成本来意义了。例如:
String escapedUsername = TextUtil. htmlEncode (username) Resources res = getResources() ; String text = String. format (res.getString(R.string.welcome_messages), escapedUsername, mailCount); CharSequence styledText = Html.fromHtml(text); |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论