strings.xml 有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,感兴趣的小伙伴们可以参考一下
不要复用
这一条可能很多人会有不同的意见,因为广为流行的编程理念就在教导我们要复用代码,当然代码复用是很好的理念,可以让程序更加简洁。但也容易形成什么都想复用的思维惯性,而这在某些场景下就可能会造成麻烦。
比如,想象下你在应用中的登录和注册界面中都是用了相同的字符串 – R.string.loading.
<string name="loading">Loading...</string>
之后如果产品需求变更,要分别使用不同的提示语,那就不得不新创建两个 string 并在代码中配置它们。所以如果从一开始就为不同页面分别配置,那需要做的就仅仅是修改下 strings.xml 文件。
<string name="sign_in_loading">正在登录...</string>
<string name="sign_up_loading">正在注册...</string>
更容易忽略的一个原因是,如果你们的应用不想只是面对国内用户,还要面对其他语系的用户的话,有些语言可能会造成意想不到的问题。
因为一些语言同样一个意思在不同的语境下,会用到不同的单词,个中滋味经历过的自然会懂。
良好的文件结构
<!-- register start --> <string name="register_username">用户名</string> <string name="register_password">密码</string> <!-- register end --> <!-- login start --> <string name="login_username">用户名</string> <string name="login_password">密码</string> <!-- login end -->
千万不要对此觉得麻烦,使用这样的方式来组织 strings.xml 文件,在应用变得复杂后,还能够很简单的通过搜索甚至观察的方式来找出你想要修改的字符串。
格式化
千万不要使用字符串拼接的方法,因为不同语言的句子顺序是多样的,字符串拼接会让你的逻辑非常复杂。
这个时候就可以考虑使用字符串格式化了:
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
%1$s 代表了会格式化的字符串,%2$d 代表了会格式化的数值并在第二的位置,大家可以以此类推。
// Java 代码: Resources res = getResources(); String text = String.format(res.getString(R.string.welcome_messages), username, mailCount); // 注意参数的顺序。 复数名词
不要像下面这样在你的 Java 代码中处理单词复数问题,因为不同的语言针对复数会有不同的语法规则。
<!-- strings.xml start --> <string name="book">book</string> <string name="books">books</string> <!-- strings.xml end --> if (bookCount == 0) { text = getString(R.string.book); } else { text = getString(R.string.books); }
正确的做法应该是使用 getQuantityString(int id, int quantity) 方法。
<plurals name="book"> <item name="one">book</item> <item name="others">books</item> </plurals> int bookCount = 4; Resources res = getResources(); String bookCount = res.getQuantityString(R.plurals.book, bookCount); // result: books.
当然 Quantity String 不仅支持 one,还支持 zero, two, few, many 和 other。
可以自由决定各自情况下,使用什么词语(当然,在中文环境下可能用处并不大)。
并且 Quantity String 也能和上面提到的格式化搭配使用:
<plurals name="book"> <item name="one">%d book found.</item> <item name="others">%d books found.</item> </plurals> int count = 4; Resources res = getResources(); String bookCount = res.getQuantityString(R.plurals.book, count, count); // result: 4 books found.
谷歌官方建议,作为一个开发者至少应该给名词提供 ‘one' 和 ‘other' 属性。
文本高亮
大家可能知道用 ForegroundColorSpan 或 SpannableStringBuilder 能够高亮一段文本中的某些内容,但这对于多语言应用来说可能并不是最好的方式,因为这两个方法都要依靠待高亮文字的具体位置作为参数。如果应用需要支持的语言多了之后,这就会写大量的 Java 代码,和频繁计算待高亮内容位置。
这个时候就可以试试用 HTML:
<string name="html_text" formatted="false"> <![CDATA[ <font color=\'#28b5f5\'>Hello</font> world. ]]> </string> TextView tv = (TextView) findViewById(R.id.tv_txt); tv.setText(Html.fromHtml(getString(R.string.html_text)));
这其实也是格式化的一种,我们不仅能定义颜色,还可以使用 < b >、< i >、< u > 来分别使字符串具有加粗、斜体和下划线。
其实 strings.xml 的用法远没有很多人想的那么简单,这里也算是抛砖迎玉一下,如果大家想要了解更详细的用法,可以参考官方文档。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍你知道有那些涨粉的方式?相关面试题,主要包含被问及你知道有那些涨粉的方式?时的应答技巧和注意事项,需要的朋友参考一下 问题范围很大,足以单独写一篇文章进行探讨。 不同的新媒体平台应该有不同的涨粉方式,但它们离不开几个核心方式。 内容增长:依靠优质内容吸引、留住、转化用户,这是最有质量的涨粉方式。 活动增长:通过不同形式的活动有策略吸引用户,它是有效的涨粉方式,对策划和执行要求高。 付
本文向大家介绍关于bash函数你可能不知道的一些事情(译),包括了关于bash函数你可能不知道的一些事情(译)的使用技巧和注意事项,需要的朋友参考一下 关于bash函数,这里有一些您不知道的东西。通常当你写一个函数时,你会这样做: 不是吗?我知道你会这么做,因为这是所有人写函数的方式。这就是我要说的。在bash中 并不像在JavaScript或c中那样意味着“函数的主体”或“函数的范围”,它实际上
本文向大家介绍关于iOS截图你应该知道的那些事儿,包括了关于iOS截图你应该知道的那些事儿的使用技巧和注意事项,需要的朋友参考一下 前言 同时按下 Home 键和电源键,咔嚓一声,就得到了一张手机的截图,这操作想必 iPhone 用户再熟悉不过了。我们作为研发人员,面对的是一个个的 View,那么该怎么用代码对 View 进行截图呢? 这篇文章主要讨论的是如何在包括 UIWebView 和 WKW
本文向大家介绍iOS推送的那些事,包括了iOS推送的那些事的使用技巧和注意事项,需要的朋友参考一下 直接切入主题,讲讲如何模拟推送以及处理推送消息。在进入主题之前,我先说几个关键流程: 1、建Push SSL Certification(推送证书) 2、OS客户端注册Push功能并获得DeviceToken 3、用Provider向APNS发送Push消息 4、OS客户端接收处理由APNS发来的消
浏览器都干了什么 用浏览器打开https://www.lcsays.com/,在网页空白处点右键选“显示网页源代码”,如下: 这才是网页的真正内容——一堆标签。浏览器向www.lcsays.com的网站服务器发送请求后,由网站服务器把这一堆标签发回给浏览器,浏览器就是根据这一堆标签的指令“渲染”成漂亮的页面的。 让我们换个视角重新看一遍这个过程。以google chrome浏览器为例,打开浏览器,
2 JavaScript那些事 1900年代初期,Java 开始投入市场,并取得巨大成功。作为 Java 的维护者的 Sun 公司,也趁热打铁,开发出了 Applet,其实这是一个合成词,可以拆分成Application 和 little 两个单词,意译的话就是“小程序”。 同时网景(Netscape)公司想开发一门让网页制作者就能学会的脚本语言,于是他们就委派了 Brendan Eich(布兰登