zero 当语言需要特别对待0时(就想阿拉伯)

one 当语言需要特别对待1(就像英语里和其他语言里的1;在russian,任何以1结尾但是不是以11结尾的也使用这种情况)

two 当语言需要特别对待1(例如Welsh的2,或者Slovenian的102)

few 当语言需要特别对待small(例如Czech的2,3,4;或者以2,3,4结尾但是不是12,13,14的Po

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

listh)

many 当语言需要特别对待large(例如Maltese的11-99)

other 当语言没有要求对特定资

实例:

%d book

%d books

代码:

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 = PluralRules.forLocale(mConfiguration.getLocales().get(0));

}

return mPluralRule;

}

}

android plurals用法(单复数),真牛相关推荐

  1. android plurals用法(单复数)

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

  2. android plurals用法

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

  3. android plurals用法(单复数),移动智能终端开发技术题库

    String bookNum = getResources().getQuantityString(R.plurals.book_number, 1, 2); tv4.setText(bookNum) ...

  4. Android plurals

    http://stackoverflow.com/questions/5651902/android-plurals-treatment-of-zero https://code.google.com ...

  5. 【转】 Android - LayoutInflate用法

    [转自]http://blog.csdn.net/scut1135/article/details/7055461 通俗的说,inflate就相当于将一个xml中定义的布局找出来. 因为在一个Acti ...

  6. 关于TxQBService报的错,腾讯你真牛B啊

    腾讯你真牛B啊,浏览器都7了,还特么的报这么低级的错误,还每10秒写一条windows日志,让人有什么心情用你的浏览器,滚. 转载于:https://www.cnblogs.com/Sabre/p/3 ...

  7. MTK驱动(77)---Android getevent用法

    Android getevent用法 getevent命令用法如下: Usage: getevent [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-d] [ ...

  8. android连接程序,android程序如何连接真机进行测试

    android 如何连真机测试 个人认为第三种方法更易理解 1. 设置android手机为USB调试模式.步骤: menu---> 设置 ---> 应用程序 ---> 开发 , 选择 ...

  9. android如何用真机测试,android studio如何使用真机测试app

    在使用android studio进行项目的调试的时候,模拟器真的有点慢,有时还很卡,大家可能还是更想使用真机进行调试,那么下面来看看android studio如何使用真机测试app的教程. 第一大 ...

最新文章

  1. Python中的lambda是什么?
  2. 小工匠聊架构 - 缓存与数据库【双写不一致】【读写并发不一致】解决方案一览
  3. wpf中把按钮变成圆角
  4. AGC004(A~E)
  5. 需求调研 现有系统梳理_对速度的需求,访问现有数据的速度提高了1000倍
  6. imagesLoaded-检测图片是否正确加载的js插件
  7. Android图片加载之认识bitmap的四种加载方式
  8. 安装和配置SQL Server Reporting Services (SSRS)
  9. php日志数据统计,PHP统计Nginx日志的User Agent数据
  10. Spring Cloud中关于@EnableFeignClients注解的属性字段basePackages
  11. 函数的定义、返回值和参数
  12. java分页及返回数据封装实例
  13. 固定成本、可变成本、沉没成本、机会成本、边际成本
  14. 【计算机毕业设计】295演唱会购票系统的设计与实现
  15. React.createElement的理解使用
  16. CSS scroll-behavior 属性 — 纯 CSS 平滑滚动
  17. 展现学习能力,可能比展现能力更重要
  18. linux网卡断流测试,RouterOS断流解决办法探讨
  19. 高效管理,OA系统如何做到?
  20. 皇后大道东 皇后大道西

热门文章

  1. Zero date value prohibited解决方法
  2. Today is Better than yesterday
  3. MSP432---Timer_A定时器详解
  4. webapi接收json字符串
  5. Mac电脑前端环境配置
  6. 作为java入门选手,我们该如何学好java
  7. sessionStorage.setItem
  8. mybatis源码阅读系列之源码下载
  9. 宝贝一到夜间就找妈妈,怎么让宝贝不再黏自己?
  10. scrapy爬取京东的数据