Android本地化资源目录详解

  我们可以设想,有两个不同分辨率的手机(320*480和480*800)要使用一些图像资源,为了使图像不失真,就需要为不同分辨率的手机指定不同的图像,为此就需要建立不同的资源目录。

  在res目录中建立了3个图像资源目录:drawable、drawable-hdpi和drawable-mdpi。其中drawable为默认图像的图像资源目录,drawable-hdpi保存了在高屏幕密度(指480*800或相似的分辨率)情况系使用的图像资源,drawable-mdpi保存了中屏幕密度(值320*480或相近的分辨率)情况下使用的资源。

  如果当前手机为高密度屏幕(分辨率为480*800或相近值),系统会自动到drawable-hdpi目录中招相应的图像资源。如果为中密度屏幕(分辨率为320*480或相近值),就会到drawable-mdpi目录孕照相应的图像资源。当然,如果是低密度(分辨率为320*480或相近值),就会到默认的drawable目录中找相应的图像资源。这3个图像资源目录中的图像文件名是完全相同的。除了屏幕密度,还可以对屏幕方向、语言、Android SDK版本等诸多方面进行本地化控制。其中默认资源目录名后面用连字符(-)连接的部分(如hdpi、mdpi等)被称为配置标识符。

  下表是Android SDK支持的配置标识符。

Android SDK支持的配置标致符


配置标识符


标识符值


描      述


MCC

MNC


例子:

mcc310;

MCC310-MNC004;

MCC208-MNC00。


MCC(移动国家代码,Moblie Country Code)和可选的MNC(移动网络代码,Moblie Network Code)是从SIM卡中读取的信息。例如,mcc310表示美国的运营商,mcc310-mnc004表示美国的Verizon运营商,mcc208-mnc00表示法国的Orange运营商。

如果设备使用无线连接(Radio Connection)(GSM手机),MCC会冲SIM卡读取,同时MNC从设备所连接的网络中读取。

你也可以单独使用MCC(例如,在应用程序中可以包含特定国家的法律资源)。如果只想知道语言,可以使用语言和地区标识符(下面会讨论)。如果你觉得使用MCC和MNC标识符,你应该仔细测试它是否可以正常运行。


语言(Language)

地区(Region)


例子:

zh-rCh;

en;

fr;

en-rUS;

rf-rFR;

rf-rCA;


语言标识符被定义为两个字母的代码,详细定义可查阅ISO 639-1.区域标识符是可选的,也可采用了两个字母的代码(但要在代码前面加一个小写的“r”),详细定义可查阅ISO 3166-1-alpha-2的相关内容。

语言和地区都不区分大小写。“r”前缀用于区分某个地方,但不能单独指定一个区域,也就是说,指定区域必须先指定语言。

如果用户和地区在系统设置中改变了当前的语言,程序在运行时就会改变自身的语言(选择与当前语言相匹配的资源目录读取资源)


布局方向(Layout Direction)


例子:

ldrtl、ldltr


ldrtl表示从右到左布局,ldtlr表示从左到有布局。

最低API Level:17(Android 4.2)


最小屏幕宽度

(smallestWidth)


sw<N>dp,其中N表示一个整数。

例子:

sw320dp;

sw600dp;

sw720dp。


最小屏幕宽度的像素。所谓最小聘雇宽度就是Android设备屏幕的最小边的宽度(像素个数),例如,分辨率是480×800的屏幕最小宽度是480,最小宽度是不会随着屏幕方向改变而改变的。

下面是一些常用的屏幕尺寸设置。

sw320dp:

240×320ldpi(QVGA屏幕的手机);

320×480ldpi(中密度屏幕的手机);

480×800ldpi(高密度屏幕的手机)。

sw480dp:480×800mdpi(中密度的手机或平板电脑);

sw600dp:600×1024mdpi(中密度的7英寸平板电脑,如Nexus 7就是属于这种设备);

sw720dp:720×1280mdpi(中密度10英寸平板电脑,如Nexus 10就属于这种设备)。

最小屏幕宽度不仅包括用户可使用的区域,也包括不可利用的区域(如系统状态栏)。系统会选择一个与当前屏幕最小宽度接近(不能超过)的资源目录。例如,当前屏幕最小宽度是600,而资源目录中有一个res/drawable-sw580dp目录,系统会使用该目录中的资源,这就因为580接近于600,而且未超过600。

最低API Level:13(Android 3.2)

可能有读者会感到疑惑,为什么上面出现了两个480×800.实际上,这两个480×800分辨率是不一样的,一个是中密度(sw480dp)、一个是高密度(sw320dp)。为了制作平板电脑,往往将屏幕弄得很大,例如6英寸或7英寸,但为了节省成本,虽然屏幕尺寸增大了,但屏幕的分辨率并没有增加,这就意味着屏幕的密度(没英寸包含的像素个数)降低了。也就是说,将一个4英寸的高密度屏幕(分辨率是480×800)的手机编程7英寸的平板,但分辨率仍然是480×800.所以尽管7英寸的平板比4英寸的手机大,但由于屏幕密度降低了,实际上平板的显示效果并没有相同分辨率的手机效果好。例如,尽管Nexus 7的分辨率是1280×800,但由于是中屏幕密度,所以显示效果并没有高屏幕密度的Nexus 4好。


可使用的屏幕宽度

(Available width)


w<N>dp,其中N表示一个整数。

例子:

w720dp;

w1024dp。


屏幕可使用的最小宽度。这里的宽度是值从屏幕左侧到右侧的宽度。当屏幕方向改变后,可使用的宽度也随之改变。例如,Nexus 7的屏幕分辨率是1280×800,如果将Nexus 7横向放置(底边为边长),可使用的宽度就是1280,如果将Nexus 7纵向放置(底边为短边),可使用的宽度为800.

例如,两个main_activity.xml文件的路径如下:

1.res/layout-sw600dp/main_activity.xml

2.res/layout-sw600dp-w720dp/main_activity.xml

假设程序运行在Nexus 7上。当Nexus 7纵向放置时,可使用的屏幕宽度是800,而且最小屏幕宽度也就是800,所以系统会使用第1个资源目录中的main_activity文件。当屏幕方向变为横向时,可使用的屏幕宽度是1280,而第2个资源目录的720(需要转换成实际的像素宽度,Nexus 7的屏幕密度是216,所以像素宽度是720×216/160=972)最接近于1280(系统会选择最接近的本地化资源目录)。所以这是系统会使用第2个资源目录中的main_activity文件。

最低API Level:13(Android 3.2)


可使用的屏幕高度

(Available height)


h<N>dp,其中N表示一个整数。

例子:

h720dp;

h1024dp。


屏幕可使用的最小高度。这里的高度是值从屏幕顶端到屏幕底端的高度。当屏幕方向改变后,可使用的高度也随之改变。例如,Nexus 7的屏幕分辨率是1280×800,如果将Nexus 7横向放置(底边为边长),可使用的高度就是900,如果将Nexus 7纵向放置(底边为短边),可使用的宽度为1280.

例如,两个main_activity.xml文件的路径如下:

1.res/layout-sw600dp/main_activity.xml

2.res/layout-sw600dp-w720dp/main_activity.xml

假设程序运行在Nexus 7上。当Nexus 7横向放置时,可使用的屏幕高度是800,而且最小屏幕高度也就是800,所以系统会使用第1个资源目录中的main_activity文件。当屏幕方向变为纵向时,可使用的屏幕宽度是1280,而第2个资源目录的720(需要转换成实际的像素宽度,Nexus 7的屏幕密度是216,所以像素宽度是720×216/160=972)最接近于1280(系统会选择最接近的本地化资源目录)。所以这是系统会使用第2个资源目录中的main_activity文件。

最低API Level:13(Android 3.2)


屏幕尺寸

(Screen Size)


small;

normall;

large;

xlarge。


small:使用低密度的QVGA屏幕。这种屏幕与HVGA的宽度相同,但比HVGA的高度小。HVGA的屏幕比例是2:3,而QVGA是3:4。QVGA的最小分辨率约为320×426,例如,QVGA低密度和VGA高密度都接近这个分辨率。

normal:使用VGA中密度屏幕。屏幕的近似分辨率为480×640.例如,VGA和WVGA的中密度屏幕都接近这个分辨率。

xlarge:基于高密度的屏幕。屏幕分辨率约为720×960.这种大分辨率要求API Level至少为9,也就是说Android 3.1及以上版本才支持这种大分辨率的屏幕。

最低API Level:4(Android 1.6)


屏幕外观

(Screen Aspect)


long;

notlong。


long:看上去较长的屏幕,如WQVGA、WVGA、FWVGA。

notlong:看上去不长的屏幕,如QVGA、HVGA、VGA。


屏幕方向

(Screen Orientation)


port;

land。


port:设置垂直(或称portrait)方向;

land:设置水平(或称landscape)方向。


UI模式

(UI mode)


car;

desk;

television;

application;


car:设置放在汽车底座上;

desk:设置放在桌面底座上;

television:设备通过电视机输出画面。通常看电视时用户会离的比较远,对于较大屏幕的电视,通常会在离电视3米以上的距离观看,因此这种在电视上观看Android画面的过程被称为“10英尺用户体验”,就是用户里电视屏幕比较远的意思。这种情况主要用于键盘操控或其他费触摸交互的方法(离屏幕好几米远当然不能用触摸方法了)。

appliance:设备并没有界面(UI),只是为服务提供服务。例如,如果将Android用机器人的控制,可能就不需要UI,而只是处理及其人的输入输出即可。

最低API Level:8(Android 2.2)

television的最低API Level:13(Android 3.2)


夜间模式

(Night Mode)


night;

notnight。


night:夜间;

notnight:白天。

最低APILevel:8(Android 2.2)


屏幕像素密度

(Screen pixel density[dpi])


ldpi;

mdpi;

hdpi;

xhdpi;

nodpi;

tvdpi。


ldpi:低密度聘雇,密度约为120dpi;

mdpi:中密度(传统的HVGA)屏幕,密度约为160dpi;

hdpi:高密度屏幕,密度约为240dpi;

xhdpi:扩展高密度屏幕,密度约为320dpi。API Level的最小值8(Android 2.2);

nodpi:应用于不需要更具屏幕密度进行拉伸的位图资源;

tvdpi:介于mdpi和hdpi之间的屏幕密度(213dpi左右)。该屏幕密度通常用于智能电视中。API Level的最小值为13(Android 3.2)。


触摸屏幕类型

(Touchscreen Type)


notouch;

finger。


notouch:设置不支持触摸屏。

finger:设置支持触摸屏幕(可能只支持手指,也可能支持手写笔和手指都支持)。


可用键盘

(Keyboard Availability)


keysexposed;

keyshidden;

keyssoft。


keysexposed:设置键盘可用(包括软件盘和物理键盘)。设备键盘可分为如下2种情况:

l 只有软键盘,没有物理键盘或物理键盘被禁用。该值只用于软键盘。

l 只有物理键盘,没有软键盘或软键盘被禁用。该值只用于物理键盘。

keyshidden:设备有一个物理键盘,但该物理键盘被隐藏(未被拉出),并且该设备没有可用的软键盘。

keyssoft:设备有一个12键的物理键盘,不管该软键盘是否可以。


首选文本输入方式

(Primary Text Input Method)


nokeys;

qwerty;

12key。


nokeys:设备没有用于文本输入的物理按键;

qwerty:设备有一个物理querty(与标准计算机键盘相同)键盘,不管这个物理键盘对用户是否可用;

12key:设备有一个12键的物理键盘,不管这个物理键盘是否对用户有用。


是否有导航键

(Navigation key availability)


navexposed;

navhidden。


navexposed:有导航键,丙炔用户可以使用这个导航键;

navhidden:导航键不可用(例如翻盖手机没有把盖子打开)。


首选非借出摸导航发送

(Primary Non-touch Navigation Method)


nonav;

dpad;

trackball;

wheel。


nonav:设备没有非触摸的导航方式;

dpad:设别通过十字方向键(d-pad)导航;

trackball:设备通过轨迹球导航;

wheel:设备通过滑轮导航。


平台版本

(Platform Version[API Level])


例子:

v3;

v4;

v7;

等等


API Level 的最低版本。例如,v1表示API Level 1(要求Android 1.0及以上的版本);v7表示API Level 7(要求Android 2.1及以上的版本)。

注意:虽然平台本标识符可以匹配等于或大于当前的Android版本,但Android 1.5(v3)和Android 1.6(v4)是两个例外。由于在这两个版中存在bug。因此,在这两个版本中使用平台版本标识符只能精确的匹配当前的Android版本。也就是说,如果只为v3,那么只有Android 1.5会满足这个标识符。这个bug在Android 1.6以后的版本已经修复。

下篇:Android屏幕适配问题详解 : http://www.cnblogs.com/stafen/p/3833087.html

Android本地化资源目录详解,布布扣,bubuko.com

时间: 2024-10-09 15:40:26

Android本地化资源目录详解的相关文章

Android屏幕适配问题详解

上篇-Android本地化资源目录详解 :http://www.cnblogs.com/stafen/p/3833048.html 单位: px(像素):屏幕上的点. in(英寸):长度单位. mm(毫米):长度单位. pt(磅):1/72英寸. dp/dip(与密度无关的像素):一种基于屏幕密度的抽象单位.在每英寸160点的显示器上,1dp = 1px,在大于160点的显示器上可能增大.一般用于位置和尺寸属性的单位. dpi:表示当前屏幕的密度. sp(与刻度无关的像素):主要用于字体大小单位

Android转载二:工程目录详解

REF:http://blog.csdn.net/dianfusoft/article/details/7422540       可以看出这个工程由src,gen,Android2.3.3 jar包,assets,bin,res,AndroidManifest.xml,proguard.cfg,project.properties这几个文件(夹)组成,具体作用如下所示: 下面分层次详解几个重要的文件(夹) ● src文件夹 展开这个文件夹如下所示 可以看出,这个文件夹主要用来存放源文件 ●ge

给 Android 开发者的 RxJava 详解

作者:扔物线 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 .而最近这几个月,我也发现国内越来越多的人开始提及 RxJava .有人说『RxJava 真是太好用了』,有人说『RxJava 真是太难用了』,另外更多的人表示:我真的百度了也谷歌了,但我还是想问: RxJava 到底是什么? 鉴于 RxJava 目前这种既火爆又神秘的现状,而我又在一年的使用

Android APK反编译详解(转)

转自:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件.   本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x

Android APK反编译详解(附图) (转至 http://blog.csdn.net/ithomer/article/details/6727581)

本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x64 反编译工具包 下载 (2012-10-10更新) 一.Apk反编译得到Java源代码 下载上述反编译工具包,打开apk2java目录下的dex2jar-0.0.9.9文件夹,内含apk反编译成java源码工具,以及源码查看工具. apk反编译工具dex2jar,是将apk中的classes.dex转化成jar文件 源码查看工具jdgui,是一个反编译工具,可以直接查看反编译后的

Android 开发 之 Fragment 详解

作者 : 韩曙亮 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/38064191 1. Fragement 概述 Fragement 与 Activity 生命周期关系 : Fragement 嵌入到 Activity 组件中才可以使用, 其生命周期与 Activity 生命周期相关. -- stop 与 destroy 状态 : Activity 暂停 或者 销毁的时候, 其内部嵌入的所有的 Fragement 也会执行

[Android]Android APK反编译详解

Android应用程序均用Java开发,通过google的指导下,实现并总结了apk文件反编译过程,不难,需要相应的工具即可. 一.Apk反编译得到Java源代码 下载上述反编译工具包,打开apk2java目录下的dex2jar-0.0.9.9文件夹,内含apk反编译成java源码工具,以及源码查看工具. apk反编译工具dex2jar,是将apk中的classes.dex转化成jar文件 源码查看工具jdgui,是一个反编译工具,可以直接查看反编译后的jar包源代码 dex2jar 和 jdg

Android工程:引用另一个Android工程的方法详解

本篇文章是对在Android中引用另一个Android工程的方法进行了详细的分析介绍.需要的朋友参考下 现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个Android工程B,想在B中引用A. 一个思路是把工程A做成纯Jar包,这样其他的工程就可以直接引用了. 但是,如果在工程A中用了R.java中的引用,则无法打成jar包了.原因是R.java是自动生成的,是动态的,每次编译都是不相同的.如果一定要做成jar包,就不能使用自动生成的R文件,

Android APK反编译详解

这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件.   本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubuntu 12.04 x86_x64 反编译工具包 下载  http://download.csdn.net/detail/sunboy_205