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用法(单复数),移动智能终端开发技术题库相关推荐

  1. 数据库(MySQL)开发技术题库

    数据库(MySQL)开发技术题库 软件工程大二下 选择+填空+简答 选择题 1.SQL语言具有数据操作功能,SQL语言的一次查询的结果是一个___D___ A) 数据项      B) 记录      ...

  2. android plurals用法(单复数)

    0.相关文章 android plurals用法 Android中的string资源占位符及Plurals string 1.使用 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的, ...

  3. android plurals用法

    参考 android plurals用法 对一个给定的语言和数字来说,决定使用哪一个case的规则是很复杂的,所以android提供了方法getQuantityString(),它可以用来为你选择合适 ...

  4. 计算机三级在线题库,计算机三级网络技术题库(附答案)

    计算机三级网络技术题库(附答案) 一.选择题(每题1分,共60分) 下列各题A.B.C.D四个选项中,只有一个选择是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分. (1)全球多媒体网是 ...

  5. 华东师大计算机软件6,华东师大计算机应用于技术题库 .doc

    华东师大计算机应用于技术题库 .doc 第一章计算机应用基础知识 一.单选题 -?般认为,信息(information)是.C 数据 B.人们关心的事情的消息 C.反映物质及其运动属性及特征的原始事实 ...

  6. 腾讯云TCA云开发工程师认证适用人群 腾讯云开发认证题库试题分享

    腾讯云开发认证概述 腾讯云开发工程师认证(TCA)是针对云上业务应用开发工程师的技能认证.通过该认证,可有效验证您是否具备将传统应用重构并迁移上云的能力,以及基于腾讯云进行云原生应用和分布式微服务的设 ...

  7. 名词解释计算机网络体系结构,计算机网络技术题库(带答案).doc

    计算机网络技术题库(带答案) 计算机技术职业技能训练系列 <计算机网络基础>题库 张明辉 李康乐 任立权 于洪鹏 计算机网络基础习题目录 第1章 计算机网络的基本概念1 第2章 数据通信的 ...

  8. 2020江苏省计算机等级考试题库,2020年江苏省计算机等级考试易考套餐:三级数据库技术题库+教材...

    &nbsp&nbsp[导读]:2020年江苏省计算机等级考试易考套餐:三级数据库技术题库+教材,更多江苏等级考试易考套餐,请访问易考吧江苏等级考试栏目 2020年江苏省计算机等级考试易 ...

  9. 计算机三级网络app,‎App Store 上的“计算机三级网络技术题库”

    计算机三级网络技术题库,本软件包含了大量计算机三级网络技术题,对备战考试的朋友很有帮助. 软件中包括以下内容: 2005年秋浙江省高等学校计算机等级考试试卷(三级,网络技术) 2006年春浙江省高等学 ...

最新文章

  1. MF_RC522_射频识别参考程序注释(2018年4月27号)
  2. 其实python面向对象3分钟就可以入门(14)
  3. 洛谷-P1903 数颜色 分块 bitset
  4. java打开别人的代码报错_同样的代码,别人的可以运行我的报错,求解答
  5. jquery.prompt.js 弹窗的使用
  6. WebService 简单安全验证
  7. 分段式多级离心泵_溧阳耐磨矿用多级泵水泵厂
  8. [转载] 在python中、关于全局变量和局部变量、以下_python中的全局变量和局部变量
  9. 软件测试的功能点理解
  10. IT基础架构规划方案
  11. idea中Tomcat中文乱码问题
  12. 集成mybatis-generator-maven-plugin报错A required class was missing while ..org/mybatis/generator/api/dom
  13. springboot文件上传 Required request part 'file' is not present
  14. Android 找不到符号错误
  15. 【Java练习】数字加密(各位数加五对十取余并反转)
  16. 在Docker中安装Home Assistant系统(以群晖系统为例)【Home Assistant入门安装篇1-2】
  17. JS 怎么使用十六进制保存100位状态的问题
  18. 基于 Openzeppelin 的可升级合约解决方案的注意事项
  19. awk打印除第一列之外的所有列
  20. [Taro] 解决 使用 Taro UI 小程序下 Iconfont 图标 不显示问题

热门文章

  1. UEFI启动是什么意思 UEFI启动对比Bios启动优势在哪里
  2. 清理系统垃圾(windows批处理脚本)
  3. android 调系统闹钟,Android 开发设置系统闹钟
  4. 计算机网络——什么是 QUIC 协议?
  5. 分布式文件存储数据库MongoDB
  6. 解决联想Y7000 双系统下的ubuntu16.04屏幕亮度无法调节的问题
  7. JS基础 -- 大复习(阶段一)
  8. 查询Oracle死锁
  9. 使用Cygwin批量下载卫星数据,以MODIS数据为例
  10. CQBZOJ 避开怪兽