android plurals用法(单复数),移动智能终端开发技术题库
String bookNum = getResources().getQuantityString(R.plurals.book_number, 1, 2);
tv4.setText(bookNum);
String bookNum2 = getResources().getQuantityString(R.plurals.book_number, 2, 4);
tv5.setText(bookNum2);
注意:一定要在English语言环境下才起作用,语言为中文不起效。
当第二个参数为1时,会调用 book,为其他数值时,会调用books。
为什么只在英文语言环境下才起作用呢?
2、源码分析
======
@NonNull
public String getQuantityString(@PluralsRes int id, int quantity, Object… formatArgs)
throws NotFoundException {
//容易看出,先根据quantity决定要使用的字符串
String raw = getQuantityText(id, quantity).toString();
//再进行占位符的替换工作
return String.format(mResourcesImpl.getConfiguration().getLocales().get(0), raw,
formatArgs);
}
@NonNull
public CharSequence getQuantityText(@PluralsRes int id, int quantity)
throws NotFoundException {
//依赖于ResourceImpl的实现
return mResourcesImpl.getQuantityText(id, quantity);
}
跟进ResourceImpl中的getQuantityText函数:
CharSequence getQuantityText(@PluralsRes int id, int quantity) throws NotFoundException {
//得到规则
PluralRules rule = getPluralRule();
//rule.select根据规则,得到quantity对应的QuanitiyCode,即"zero"、“one”、"other"等
//之后再根据QuanitiyCode,的到具体的资源文件
CharSequence res = mAssets.getResourceBagText(id,
attrForQuantityCode(rule.select(quantity)));
if (res != null) {
return res;
}
//rule没能找到对应的QuanitiyCode时,就用"other"字段的定义
res = mAssets.getResourceBagText(id, ID_OTHER);
if (res != null) {
return res;
}
//上面寻找资源文件出问题,就抛出异常
throw new NotFoundException(“Plural resource ID #0x” + Integer.toHexString(id)
" quantity=" + quantity
" item=" + rule.select(quantity));
}
这里我们首先看一下getPluralRule函数:
private PluralRules getPluralRule() {
synchronized (sSync) {
if (mPluralRule == null) {
//单例模式,且和本地化有关,以Locales的第一个配置来初始化规则
mPluralRule = Pl
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
uralRules.forLocale(mConfiguration.getLocales().get(0));
}
return mPluralRule;
}
}
PluralRules的select函数对应的底层实现,在此不作深研究,不同的Locales应该有不同的实现。
在此看看attrForQuantityCode:
private static int attrForQuantityCode(String quantityCode) {
switch (quantityCode) {
case PluralRules.KEYWORD_ZERO: return 0x01000005;
case PluralRules.KEYWORD_ONE: return 0x01000006;
case PluralRules.KEYWORD_TWO: return 0x01000007;
case PluralRules.KEYWORD_FEW: return 0x01000008;
case PluralRules.KEYWORD_MANY: return 0x01000009;
default: return ID_OTHER;
}
}
从上面的代码可以看出,PluralRules的select函数的作用,就是将quantity映射成PluralRules定义的Keyword。
android plurals用法(单复数),移动智能终端开发技术题库相关推荐
- 数据库(MySQL)开发技术题库
数据库(MySQL)开发技术题库 软件工程大二下 选择+填空+简答 选择题 1.SQL语言具有数据操作功能,SQL语言的一次查询的结果是一个___D___ A) 数据项 B) 记录 ...
- android plurals用法(单复数)
0.相关文章 android plurals用法 Android中的string资源占位符及Plurals string 1.使用 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的, ...
- android plurals用法
参考 android plurals用法 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的,所以android提供了方法getQuantityString(),它可以用来为你选择合适 ...
- 计算机三级在线题库,计算机三级网络技术题库(附答案)
计算机三级网络技术题库(附答案) 一.选择题(每题1分,共60分) 下列各题A.B.C.D四个选项中,只有一个选择是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分. (1)全球多媒体网是 ...
- 华东师大计算机软件6,华东师大计算机应用于技术题库 .doc
华东师大计算机应用于技术题库 .doc 第一章计算机应用基础知识 一.单选题 -?般认为,信息(information)是.C 数据 B.人们关心的事情的消息 C.反映物质及其运动属性及特征的原始事实 ...
- 腾讯云TCA云开发工程师认证适用人群 腾讯云开发认证题库试题分享
腾讯云开发认证概述 腾讯云开发工程师认证(TCA)是针对云上业务应用开发工程师的技能认证.通过该认证,可有效验证您是否具备将传统应用重构并迁移上云的能力,以及基于腾讯云进行云原生应用和分布式微服务的设 ...
- 名词解释计算机网络体系结构,计算机网络技术题库(带答案).doc
计算机网络技术题库(带答案) 计算机技术职业技能训练系列 <计算机网络基础>题库 张明辉 李康乐 任立权 于洪鹏 计算机网络基础习题目录 第1章 计算机网络的基本概念1 第2章 数据通信的 ...
- 2020江苏省计算机等级考试题库,2020年江苏省计算机等级考试易考套餐:三级数据库技术题库+教材...
  [导读]:2020年江苏省计算机等级考试易考套餐:三级数据库技术题库+教材,更多江苏等级考试易考套餐,请访问易考吧江苏等级考试栏目 2020年江苏省计算机等级考试易 ...
- 计算机三级网络app,App Store 上的“计算机三级网络技术题库”
计算机三级网络技术题库,本软件包含了大量计算机三级网络技术题,对备战考试的朋友很有帮助. 软件中包括以下内容: 2005年秋浙江省高等学校计算机等级考试试卷(三级,网络技术) 2006年春浙江省高等学 ...
最新文章
- MF_RC522_射频识别参考程序注释(2018年4月27号)
- 其实python面向对象3分钟就可以入门(14)
- 洛谷-P1903 数颜色 分块 bitset
- java打开别人的代码报错_同样的代码,别人的可以运行我的报错,求解答
- jquery.prompt.js 弹窗的使用
- WebService 简单安全验证
- 分段式多级离心泵_溧阳耐磨矿用多级泵水泵厂
- [转载] 在python中、关于全局变量和局部变量、以下_python中的全局变量和局部变量
- 软件测试的功能点理解
- IT基础架构规划方案
- idea中Tomcat中文乱码问题
- 集成mybatis-generator-maven-plugin报错A required class was missing while ..org/mybatis/generator/api/dom
- springboot文件上传 Required request part 'file' is not present
- Android 找不到符号错误
- 【Java练习】数字加密(各位数加五对十取余并反转)
- 在Docker中安装Home Assistant系统(以群晖系统为例)【Home Assistant入门安装篇1-2】
- JS 怎么使用十六进制保存100位状态的问题
- 基于 Openzeppelin 的可升级合约解决方案的注意事项
- awk打印除第一列之外的所有列
- [Taro] 解决 使用 Taro UI 小程序下 Iconfont 图标 不显示问题