Android 字符串的一些使用技巧

有时候字符串让人觉得很麻烦,知道一些小技巧,可以避免自己挖坑自己跳,比如一些显示效果本可以在string.xml中完成,我们又用了很多代码去实现,这样不仅维护变得困难,还有可能产生Bug。

最好不要重用字符串

假设在登录和注册界面都有一个加载框,你如果使用同一个字符串R.string.loading:
loading
之后你又决定使用不同的字符串来区分登录和注册,那么你不得不新建两个字符串,并且在相应Java代码修改。 如果一开始就使用两个不同的字符串,那么就在strings.xml文件修改就行了。
loading

用标识区分字符串名字

通过前缀或者注释来区分一下哪些字符串是在同一个页面的。
loading
通过这样可以很快的识别出当前字符串属于哪个页面,清晰的标识也更易于维护和翻译成不同的语言。

格式化字符串

千万不用通过“+”运算来连接字符串产生新的字符串来使用,因为翻译成其他语言后,有时(其实是大多数情况)会狗屁不通。
loading
正确的方法是用Resources#getString(int id, Object… formatArgs)。
loading
再举个例子:
<string name="today_state_string">您正与%1$d位朋友在跑步,本周排名提升了%2$.3f,获得%3$s勋章,等级为%4$c!</string>
从上面这行字符串的定义可以看出,格式化字符串资源的格式为:
%+参数位置+$+格式化类型,其中:
参 数 位 置:从1开始依次编号,String.forma方法的第二个参数为格式化的第一个参数,后面依次递增;
格式化类型:
s 字符串
f 浮点数
d 整型数
c 字符类型

处理单复数

最好不用在Java代码中处理单复数,因为不同的语言有不同的单复数规则,我们一般都是这样处理:
loading
正确的做法是使用Resources#getQuantityString (int id, int quantity)。
loading

词语的高亮处理

如果要改变TextView里的一些词语的颜色,ForegroundColorSpan并不总是最好的选择,最好使用HTML字体颜色标记你的strings.xml。
比如你想把Discover and play games.” 里的“Discover” 和 “play” 显示为蓝色,那么你可以这样:
loading
还支持<b></b>加粗字体, <i></i> 斜体字体,<u></u> 给字体加下划线等标签。

数组

有时需要一个数组内容来给用户选择或者提示,为了使用和翻译方便,也可以写在strings.xml文件。
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
</string-array>
然后在Java代码中获取:
String[] planets = getResources().getStringArray(R.array.planets_array);