不可不知的 Android strings.xml 那些事
来源:互联网 发布:无线网访客网络 编辑:程序博客网 时间:2024/05/21 03:56
转自:http://www.jianshu.com/p/ea5f8713c9a3
相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧。: )
不要复用
不要在不同的界面中复用相同的字符串。
这一条可能很多人会有不同的意见,因为广为流行的编程理念就在教导我们要复用代码,当然代码复用是很好的理念,可以让程序更加简洁。但也容易形成什么都想复用的思维惯性,而这在某些场景下就可能会造成麻烦。
比如,想象下你在应用中的登录和注册界面中都是用了相同的字符串 - R.string.loading.
<string name="loading">Loading...</string>
之后如果产品需求变更,要分别使用不同的提示语,那就不得不新创建两个 string 并在代码中配置它们。所以如果从一开始就为不同页面分别配置,那需要做的就仅仅是修改下 strings.xml 文件。
<string name="sign_in_loading">正在登录...</string><string name="sign_up_loading">正在注册...</string>
更容易忽略的一个原因是,如果你们的应用不想只是面对国内用户,还要面对其他语系的用户的话,有些语言可能会造成意想不到的问题。
因为一些语言同样一个意思在不同的语境下,会用到不同的单词,个中滋味经历过的自然会懂。
良好的文件结构
使用区分不同界面的前缀和注释来分隔文件。
- 每一个 string 添加一个区分界面的前缀可以让你马上辨别出当前字符串是用在哪个界面的。
- 清晰的 strings.xml 文件结构可以帮助你快速的定位和修改文件,当应用复杂之后这会显得格外重要。
格式化
用 getString(int id, Object... formatArgs) 方法来格式化字符串。
千万不要使用字符串拼接的方法,因为不同语言的句子顺序是多样的,字符串拼接会让你的逻辑非常复杂。
正确的做法应该是:首先在 strings.xml 文件中进行定义,%s 代表了会变动的部分。
<string name="login_welcome_back">%s 欢迎回来</string>
Java 代码:
String username = "Hevin";String welcome = getString(R.string.login_welcome_back, username);// result: Hevin 欢迎回来
复数名词
使用 getQuantityString(int id, int quantity) 来处理复数名词。
不要像下面这样在你的 Java 代码中处理单词复数问题,因为不同的语言针对复数会有不同的语法规则。
<!-- strings.xml start --><string name="minute">minute</string><string name="minutes">minutes</string><!-- strings.xml end -->String text;int minutes = Calendar.getInstance().get(Calendar.MINUTE);if (minutes == 0) { text = getString(R.string.minute);} else { text = getString(R.string.minutes);}
正确的做法应该是使用 getQuantityString(int id, int quantity) 方法。
<!-- strings.xml start --><plurals name="minutes"> <item quantity="one">minute</item> <item quantity="other">minutes</item></plurals><!-- strings.xml end -->int minutes = Calendar.getInstance().get(Calendar.MINUTE);String text = getResources().getQuantityString(R.plurals.minutes, minutes);
文本高亮
使用 html 来高亮指定文本。
使用 ForegroundColorSpan 来高亮一段文本中的某些内容,并不总是最好的解决方法。因为其要依靠 indexes(文字所在的位置),所以对于多语言 App 来说并不方便。
这个时候可以试试下面的方法:
<string name="html_text" formatted="false"><![CDATA[ <font color=\'#28b5f5\'>Discover</font> and <font color=\'#28b5f5\'> play </font> games. ]]></string>
Java:
TextView tv = (TextView) findViewById(R.id.tv_txt);tv.setText(Html.fromHtml(getString(R.string.html_text)));
- 不可不知的 Android strings.xml 那些事
- 不可不知的 Android strings.xml 那些事
- 不可不知的 Android strings.xml 那些事
- 不可不知的 Android strings.xml 那些事
- ubuntu那些不可不知的命令(一)
- 文件系统那些事-第2篇 不可不知的文件系统特性
- 那些你不可不知的xcode调试技巧
- android开发不可不知的UI知识
- android 开发中不可不知的技巧
- android 开发中不可不知的技巧
- android 开发中不可不知的技巧
- android 开发中不可不知的技巧
- android 开发中不可不知的技巧
- Android strings 的那些小事
- 写简历不可不知的事
- 第九章 Service不可不知的事
- 不可不知的EventBus
- 不可不知的前端
- DetachedCriteria
- 暑假留校学习总结(第二周)
- hlsl shader编译中遇到的一个坑
- 内网穿透-搭建ngrok服务器
- 1.Getting Started
- 不可不知的 Android strings.xml 那些事
- Wordpress特色图像外链插件 Featured Image From URL
- base64转换
- Android之Edittext禁止输入表情符号(雷惊风)
- Android-开发笔记-005_布局与ListView控件
- GIT常用命令
- C和C++混合编程(转)
- win10 uwp 隐私声明
- 怎么压缩pdf文件的大小