Android-应用的本地化及知识拓展之配置修饰符
步骤很简单,只需要两步:
1.创建带有目标语言的配置修饰符的资源子目录
2.将可选资源放入该目录下,android系统会自动处理后续工作
在这里我们需要讲解一下配置修饰符。
中文的配置修饰符:-zh,那么我们需要在res目录下新建两个子目录:res/raw-zh,res/values-zh。
对于没有配置修饰符修饰的子目录,安卓都识别为默认资源目录。但是有一个例外,那就是屏幕显示密度(drawable资源),通常具有三个配置修饰符:-mdpi -hdpi -xhdpi。安卓系统选择何种drawable资源综合考虑屏幕密度和实际尺寸,甚至有可能会选择低于或高于当前设备屏幕密度的drawable资源,然后通过缩放来实现匹配。但长话短说,最重要的是我们需要记住,res/drawable并不是默认资源目录,我们无需将默认drawable资源放到该目录下。
常用的配置修饰符
中文语言(values-zh)
水平模式的屏幕方位(layout-land)
中等的屏幕显示密度(drawable-mdpi)
11及以上的API级别(values-v11)
屏幕尺寸修饰符
那么有哪些是具有配置修饰符的设备特征呢?
关于设备配置特征及其对应配置修饰符请查看http://developer.android.com/guide/topics/resources/providing-resources.html
上图也是配置修饰符的优先级,这话怎么理解呢?我们直接上实例:
old phone setting: 语言(英文),屏幕方位(垂直)
我们想干什么:当改变手机语言配置时,该app也能变成中文;当屏幕方位变成水平时,标题能变成另一句更长的话。于是我们做了两件事:values-zh(用来存放中文字符串资源),values-land(用于存放当屏幕处于水平状态时的标题字符串)
new phone setting:语言(中文)。屏幕方位(水平)
这时候问题来了:安卓系统会选用那个values资源呢?这时候对应上图所示的配置修饰符优先级,我们可以发现语言的优先级高于屏幕方位的优先级,因此系统会选用values-zh,而不是values-land。
问题知道了,如何解决呢?答案是多重配置修饰符。
通过values-zn-land就可以解决这个问题了。但是我们必须注意,顺序也是通过优先级来确定的。
整个配置修饰符的使用过程是这样的:
手机配置-----(完全对应)---->配置修饰符--(获取对应资源)-->完成改变
但是对于屏幕密度这个配置并非完全对应,这话什么意思呢?还是举例,比如说手机配置语言改成了中文,那么就会和-zh对应,但是屏幕密度如果是中等,但并不会必然和-mdpi对应,系统会综合考虑屏幕密度以及实际手机尺寸来得到应有的资源。
至于安卓res目录下资源目录名称清单:http://developer.android.com/guide/topics/resources/available-resources.html
太阳照常升起,人生寂寞如雪。
Android-应用的本地化及知识拓展之配置修饰符的更多相关文章
- C#基础知识八之访问修饰符
1. 类的访问修饰符 修饰符 访问权限 无或者internal 只能在同一个程序集中访问类 public 同一个程序集或引用该程序集的外部都可访问类 abstract或internal abstra ...
- Java基础知识回顾之二 ----- 修饰符和String
前言 在上一篇中,回顾了Java的基本数据类型 ,这篇就来回顾下Java中的一些修饰符以及String. 修饰符介绍 Java修饰符主要分为两类: 访问修饰符 非访问修饰符 其中访问修饰符主要包括 p ...
- 《Java基础知识》Java访问修饰符(访问控制符)
Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...
- C++基础知识篇:C++ 修饰符类型
C++ 允许在 char.int 和 double 数据类型前放置修饰符.修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求. C/C++的学习裙[七一二 二八四 七零五 ],无论你是小白还是 ...
- Android屏幕适配方案——基于最小宽度(Smallest-width)限定符
转自:https://www.cnblogs.com/error404/p/3815739.html 一.关于布局适配建议 1.不要使用绝对布局 2.尽量使用match_parent 而不是fill_ ...
- 开发一款高端大气上档次的android应用需要必备的知识——记于2013年末
Android入门还是很简单的,看两本书,翻阅几篇文章,搭建了开发环境就算入门了.可是怎样开发一款完备的android应用呢,开发一款高端的android应用又需要那些知识呢,作者根据几年的开发经验做 ...
- [转]Android进程与线程基本知识
转自:http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html 本文介绍Android平台中进程与线程的基本知识. 很早的时候就 ...
- Android之.9图的知识
Android之.9图的知识 .9图的介绍 .9图也称为pPatch图,它是android app开发里一种特殊的图片形式,文件的扩展名为:.9.png. 9patch图片的作用就是在图片拉伸的时候保 ...
- 跟踪oracle中sql语句运行过程及相关知识拓展
select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这种方 ...
随机推荐
- noip201506 Message 信息传递
试题描述: 有 n 个同学(编号为 1 到 n )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 i 的同学的信息传递对象是编号为 T_i 的同学.游戏开始时,每人都只 ...
- 【转】Debug和Release区别
VC下Debug和Release区别 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步 ...
- 用c++11打造类似于python的range
python中的range函数表示一个连续的有序序列,range使用起来很方便,因为在定义时就隐含了初始化过程,因为只需要给begin()和end()或者仅仅一个end(),就能表示一个连续的序列.还 ...
- day03
1.set集合--无序的,不重复的序列,类似dict,但是只有key,没有value 创建一个集合: s1 = {11,22,33} s2 = set((22,33,44))必须传入一个可迭代对象(t ...
- Toast——提醒方式
Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间,我们现在就尝试一下如何在活动中使用To ...
- 理解 break, continue, return 和 exit
你们知道 “break”, “continue”, “return” 和 “exit”的作用吗? 它们是功能强大的语言结构体.下面通过一个测试函数来说明它们之间的不同. 1 2 3 4 5 6 7 8 ...
- SolrCloud 5.2.1 installation and configuration
虽然不是很有技术含量的事情,主要依靠的是阅读能力,然而知识的东西还是记录一下,以备后继待查. 环境相关 1. Server:h1,h2,h3 2. OS RHEL 6.2 3. Zookeeper 3 ...
- 注意:rsyslog 源码安装 会出现日志重复发的情况,需要rpm包安装
cd /etc/yum.repos.d;wget http://rpms.adiscon.com/v8-stable/rsyslog.repo uat-web02:/etc/yum.repos.d# ...
- Java中string拼接,StringBuilder,StringBuffer和+
Java中string拼接,StringBuilder,StringBuffer和+,到底哪个更合适? StringBuilder线程不安全,效率较线程安全的StringBuffer高.jdk1.5之 ...
- 九度OJ1486 /POJ 1029/2012北京大学研究生复试上机
wa到死!wa到死!这是一个看着简单,坑及其多的题! 坑一:POJ上是单组输入,九度上是多组输入,妈蛋要是研究生复试遇到这种大坑肯定死掉啊!而且对于codeforces比较习惯的 同学肯定会觉得巨坑无 ...