此处的Android文档http://developer.android.com/guide/topics/resources/localization.html说明您可以使用此方法获取当前区域设置:
context.getResources().getConfiguration().locale
Run Code Online (Sandbox Code Playgroud)
似乎Java已经以这种方法的形式提供了这些信息:
java.util.Locale.getDefault()
Run Code Online (Sandbox Code Playgroud)
那么为什么Android开发人员会介绍另一种获取语言环境的方法呢?当同时并行运行时,上面两行代码会产生不同的结果吗?
Gre*_*lli 28
我同意这是令人困惑的,虽然我没有攻击它,也没有我在捍卫它,我可以看到它允许你做一些事情.
让我们从头开始.
java.util.Locale.getDefault()由java运行时定义.它是手机/设备的区域设置.当没有语言环境时,它支持DateFormats(ISO Dateformat标准,美国格式标准等),NumberFormats(逗号或小数,3或4的分组等)和CurrenyFormats(它看起来像$或CAD)给出.对于这些情况,最好将Locale指定为这些类型的对象.
context.getResources().getConfiguration().locale是在给定上下文中向当前资源包注册的语言环境.它可以包括所有资源内容将遵循当前上下文/资源对的区域设置值.配置可以类似于最佳过滤到当前资源的设备的当前状态.您不一定需要指定根据区域设置更改的任何内容,但它是一个选项.
资源使用一组鉴别的像方向,屏幕宽度,语言环境等配置,使您的应用程序中,您可能允许只是改变了语言环境的应用程序配置到不同的区域与另一个覆盖当前资源().例如,您正在为地址制作布局.您可能希望某些字段根据所选国家/地区的变化而变形.(对于这样的应用程序,这并不是说这是正确的行为,但现在最简单的想法).如果你不得不简单地依赖Locale.getDefault(),那么当你想要按照我刚才描述的方式做某些事情时,它会使系统应用程序和状态的一些尴尬重置.
您基本上需要修改整个设备的Locale(这不一定是安全的,也不是任何老用户都喜欢的东西).即使我们忽视安全管理器会被主机vm复制的问题; 在大多数设备上,有很多状态是为国家/地区套件缓存的.因此,在将此值转换为(如果任何人都可以这样做)时,可能存在相当大的滞后并且可能存在很多不稳定性.另一种选择是始终指定所有内容的区域设置.你可以看到它会有多烦人.所以它在Context的配置中.
因此,虽然它很尴尬,但确实提供了额外的自由度和保护,以及便利性.大多数情况下,它将是Locale.getDefault(),因为您的应用程序是从基本上下文初始化为Locale.getDefault()的进程启动的.一般来说,我会回避过多使用Locale.getDefault()值.消费者应用程序开发中没有太多次可以信任.
同样不是基于事实,因为我不是OS开发人员,只是主要基于分析系统的优缺点.我认为配置中的语言环境是完全合理的.
| 归档时间: |
|
| 查看次数: |
6352 次 |
| 最近记录: |