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对应,系统会综合考虑屏幕密度以及实际手机尺寸来得到应有的资源。

    太阳照常升起,人生寂寞如雪。

时间: 2024-12-28 21:46:56

Android-应用的本地化及知识拓展之配置修饰符的相关文章

C#基础知识八之访问修饰符

1.  类的访问修饰符 修饰符 访问权限 无或者internal 只能在同一个程序集中访问类 public 同一个程序集或引用该程序集的外部都可访问类 abstract或internal abstract 只能在同一程序集中访问类,且该类不能被实例化,只能被继承 public abstract  同一个程序集中或引用该程序集的其他程序集都可访问类,不能被实例化,只能被继承 sealed或internal sealed  只能在同一程序集中访问类,该类不能被继承,只能把实例化 public sea

c#基础知识 类的继承 修饰符

子类 父类 单继承 所有类都是 class Stusent :Person{ //student继承person类 } 继承 子类自动从父类那里继承所有的 字段.方法.属性.索引器等成员作为自己的成员 处理继承父类的成员外,子类还可以 添加新的成员 隐藏或修改父类的成员 class A{ public int a: } class B:A{ new public int a; } public公共  private私有 static的字段.方法.属性是属于整改类的,直接通过类型访问

Android进程与线程基本知识

Android进程与线程基本知识 本文介绍Android平台中进程与线程的基本知识. 很早的时候就想介绍一下Android中的进程和线程,但由于其他的事情一直给耽搁了,直到现在才能和大家一起分享下. 1.Android进程基本知识: 我们先来了解下Android中的进程基本知识. 当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程.默认的情况下,所有该程序的组件都将在该进程和线程中运行. 同时,Android会为每个应用程序分配一个单独的LINUX用户.Android

Android Camera开发之基础知识篇

概述 Android框架支持设备的相机拍照和录像功能,你的应用可以直接调用系统的Camera应用来拍照或者录像(比如微信拍照),当然也可以利用Android系统提供的API开发一个Camera应用来实现相机拍照和录像功能(比如市面上流行的360相机).此篇文章主要记录相机开发有关的基础知识,以及带着自己的理解翻译Camera官方文档,如有翻译不恰当支出,还请指出改正.当然我会开一个有关相机开发的一个系列,该系列主要内容包括如下: 相机基本预览拍照功能. 实现相机的Flash,Hdr,滤镜,前后摄

跟踪oracle中sql语句执行过程及相关知识拓展

<pre name="code" class="sql">select * from v$sqlarea; select * from v$sqlarea where first_load_time>'2010-11-27/09:30:00'; 这个方法查询结果每条记录显示一条查询语句,且只能查询sql_text小于1000字符的,多余的会被截断. 改进一下: select * from v$sqlarea where first_load_tim

[转]Android进程与线程基本知识

转自:http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html 本文介绍Android平台中进程与线程的基本知识. 很早的时候就想介绍一下Android中的进程和线程,但由于其他的事情一直给耽搁了,直到现在才能和大家一起分享下. 1.Android进程基本知识: 我们先来了解下Android中的进程基本知识. 当一个程序第一次启动的时候,Android会启动一个LINUX进程和一个主线程.默认的情况下,所有该程序的组件都将在

php基础知识掌握——四种界定符

闲来无事,研究了与java.c#完全不同的领域php,php即(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”),对于学习php的初学者,不得不掌握apache的部署,apache的部署,后面会讲到,当然对php.apache.mysql现在也有比较多一键式部署工具,例如WAMP(windows.apache.mysql.php):资源网上比较多,这里就不讲相关的资源链接发出来了,为避免出现获取积分的嫌疑:言归正传,下面就讲讲php的基础知识吧. 四种

Android x86模拟器Intel Atom x86 System Image配置与使用方法

Android x86模拟器Intel Atom x86 System Image配置与使用方法      前言:      大家现在开发使用的Android 模拟器模拟的是 ARM 的体系结构(arm-eabi),因此模拟器并不是运行在x86上而是模拟的ARM,所以我们调试程序的时候经常感觉到非常慢,大部分开发者应该都深有体会.      针对这种情况,前段时间Intel推出了支持x86的Android模拟器,这将大大提高启动速度和程序的运行速度,这将允许Android模拟器能够以原始速度(真

20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. internal: 只能在当前项目中访问,在同一个项目中,internal和public的权限是一样的. protected internal: protected + internal权限. 1.1:能够修饰类的访问修饰符只有两个: public / internal 1.2:接口中的成员不允许