不可不知的Android strings.xml那些事

 更新时间:2016年08月08日 11:37:38   作者:Hevin丶  
相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧

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 的用法远没有很多人想的那么简单,这里也算是抛砖迎玉一下,如果大家想要了解更详细的用法,可以参考官方文档。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Android中 自定义数据绑定适配器BaseAdapter的方法

    Android中 自定义数据绑定适配器BaseAdapter的方法

    本篇文章小编为大家介绍,Android中 自定义数据绑定适配器BaseAdapter的方法。需要的朋友参考下
    2013-04-04
  • Android中activity从创建到显示的基本介绍

    Android中activity从创建到显示的基本介绍

    这篇文章主要给大家介绍了关于Android中activity从创建到显示的相关资料,文中通过示例代码介绍的非常详细,对各位Android初学者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。
    2017-11-11
  • android 禁止第三方apk安装和卸载的方法详解

    android 禁止第三方apk安装和卸载的方法详解

    这篇文章主要介绍了android 禁止第三方apk安装和卸载,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Android中使用ViewFlipper进行手势切换实例

    Android中使用ViewFlipper进行手势切换实例

    这篇文章主要介绍了Android中使用ViewFlipper进行手势切换的方法,以实例形式详细讲述了XML文件的定义及功能函数的实现过程,需要的朋友可以参考下
    2014-10-10
  • Android实现几种推送方式解决方案

    Android实现几种推送方式解决方案

    推送功能在手机开发中应用的场景是越来起来了,本篇文章主要介绍了Android实现几种推送方式解决方案 ,具有一定的参考价值,有兴趣的可以了解一下。
    2016-12-12
  • Flutter网络请求库DIO的基本使用

    Flutter网络请求库DIO的基本使用

    这篇文章主要介绍了Flutter网络请求库DIO的基本使用,帮助大家更好的理解和学习使用Flutter,感兴趣的朋友可以了解下
    2021-04-04
  • react native打包apk文件安装好之后进入应用闪退的解决方案

    react native打包apk文件安装好之后进入应用闪退的解决方案

    这篇文章主要介绍了react native打包apk文件安装好之后进入应用闪退的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Android AMS启动App进程原理分析

    Android AMS启动App进程原理分析

    这篇文章主要介绍了Android AMS启动App进程原理,系统fork函数是如何创建进程,文中有详细的代码示例,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-05-05
  • Android中SharedPreference使用实例讲解

    Android中SharedPreference使用实例讲解

    这篇文章主要介绍了Android中SharedPreference使用方法,实现登陆界面记住密码功能,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Android通过bin二进制程序调用jar原理

    Android通过bin二进制程序调用jar原理

    最近在研究monkey测试,发现monkey测试的代码都是JAVA编写的,通过编译生成jar包,而我们在执行测试时直接执行/system/bin/monkey这个二进制程序的,那么它是如何能调起java程序的呢,本文小编给大家介绍了Android通过bin二进制程序调用jar原理,需要的朋友可以参考下
    2023-10-10

最新评论