字符串

本文主要讲解 Android 开发中常见的 strings.xml 的使用技巧。

避免过度复用

不要复用不同页面上的字符串

1.假设你现在在 Sign In 与 Sign Up 两个界面上都设置了一个加载提示框,因为两个都是用于提示正在加载中的,因此你打算使用相同的提示语 —— R.string.loading 不过后来 PM 说这样实在太不友好了,因此你打算用两个更具体点的提示语来代替,因此你将你的strings.xml修改为了:

2.对于一个国际化的项目,你并不知道应用最后需要支持多少种语言,可能你需要在某些语言中表述某些情景是相同的词汇,而某些语言中某些情景压根不同,譬如: 注意,在英文版本中的 strings.xml 中对于R.string.download_file_yesR.string.terms_of_use_yes 都使用了 Yes,而 Ukrainian 版本中则是两个单词。

合理分割

对于相同页面中的字符串以前缀与注释分割

1.添加前缀到字符串上有助于辅助快速地识别字符串是属于哪个页面的。2.清晰的字符串的区分也有助于未来对国际化的支持,可以按照页面来逐个地进行多语言支持。

Format

使用 Resources#getString(int id, Object...formatArgs) 来格式化字符串

尽量避免使用+来连接字符串,因为在不同的语言里对于词汇的划分是不一致的。 正确的方法是使用:Resources#getString(int id, Object… formatArgs).

Plurals:复数处理

使用Resources#getQuantityString (int id, int quantity)来处理复数字符串

尽量不要在 Java 代码中判断是否需要使用复数表述,同样是因为不同的语言对于复数表述的文法规则是不一样的。 正确的方法是使用Resources#getQuantityString (int id, int quantity)来进行处理:

Words highlighting:单词高亮

使用 HTML 文法规范来进行单词高亮

如果我们希望在 TextView 中修改一些单次的颜色,可能ForegroundColorSpan不一定是最佳的选择,同样是因为基于下标的高亮策略可能在不同的语言中出现问题。最好的呢,也还是使用 HTML 的字体颜色标签进行控制,譬如你希望在Discover and play games这一段话中需要将Discoverplay进行高亮展示: