Android 国际化与屏幕适配!

来源:互联网 发布:讲课视频软件 编辑:程序博客网 时间:2024/06/05 02:50

今天主要探讨Android国际化与屏幕适配的问题!

首先为什么要有国际化?

概念:
   
 国际化将我们的应用程序适用于不同的地域和语言环境Android系统为我们提供了很方便的国际化机制,我们只需要配置不同的资源文件,就可以实现应用程序的国际化需求。

internationalization (国际化)简称 i18n,因为在i和n之间还有18个字符,localization(本地化 ),简称L10n。

一般用语言_地区的形式表示一种语言,如  zh_CN, zh_TW.

 

参考链接如下:

各国语言缩写  http://www.loc.gov/standards/iso639-2/php/code_list.php

国家和地区简写 http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html

国家_地区语言速查表http://www.cnblogs.com/Mien/archive/2008/08/22/1273950.html


语言码表单
https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
国家码表单
https://en.wikipedia.org/wiki/ISO_3166-1


strings国际化
创建value文件名后面加上“语言-r地区”,可以让value中资源文件国际化。 
语言码由两个小写字母组成:中文(zh) 
国家码由两个大写字母组成:China(CN)
drawable国际化
在drawable文件名后面加上“语言-r地区”,可以让图片资源文件国际化。 
此时,如果修改手机的国家以及语言设置,程序中显示的资源也会随之改变。

常见的有:

zh_cn: 简体中文

zh_hk: 繁体中文(中国香港)  

zh_tw: 繁体中文(中国台湾地区)

en-hk: 英语(香港)

en_us: 英语(美国)

en_gb: 英语(英国)

en_ww: 英语(全球)

ja_jp: 日语(日本)

ko_kr: 韩文(韩国)

具体实现:

在Android工程的res目录下,通过定义特殊的文件夹名称就可以实现多语言支持。比如我们的程序兼容简体中文、英文,在values文件夹中建立默认strings.xml,再建立values-zh-rCN文件夹。

在每个文件夹里放置一个strings.xml,strings.xml里是各种语言字符串。如果涉及到参数配置类xml文件夹名称也要改成xml-zh、xml。这样在android的系统中进行语言切换,所开发的程序也会跟着切换语言。

Java代码 
  1. Resources resources = getResources();//获得res资源对象  
  2. Configuration config = resources.getConfiguration();//获得设置对象  
  3. DisplayMetrics dm = resources .getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。  
  4. config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文  
  5. resources.updateConfiguration(config, dm);  

-------------------

ABOUT:

通常国际化我们只要在res/目录下在重新定义values-国家编号,如values-zh-rCN简体汉语,values-zh-rTW繁体,values-jp日语等。

(配置选项包括语言代号和地区代号。 表示中文和中国的配置选项是 zh-rCN; 表示英文和美国的配置选项是en-rUS.  表示zh 和 en 表示中文和英文;CN  和 US 表示中国和美国;  前面的r 是必须的)

  目录结构如下图所示:



这里我只在values-zh-rCN作了改动,代码如下:

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="hello">Hello World, ResourceDemo!</string>

<string name="app_name">ResourceDemo</string>

<string name="land">这是横屏模式.</string>

<string name="port">这是竖屏模式.</string>

</resources>

  我们运行程序之前,把手机语言改成中文,在settings(设置)->language & keyboards(语言与键盘)目录下,选择简体中文,如下图所示:


这时候我们应用的显示内容就为中文了,而不去显示values/strings.xml里的内容。

——————————————————————————————————————————————————————————————————

接下来是屏幕适配!


以下只是之前学习的笔记。


屏幕适配


屏幕属性介绍:
分辨率:是指屏幕上有横竖各有多少个像素点 
屏幕尺寸:android将屏幕大小分为四个级别small,normal,large,and extra large 
屏幕像素密度(dpi):每英寸有多少像素数目, 密度越大,屏幕的精细度越高,屏幕看起来就越清楚。

尺寸单位:px:像素 屏幕上的真实像素表示 
                  dp:和密度无关的像素 相对屏幕物理密度的抽象单位。

160dpi屏幕,1dp=1px 
240dpi屏幕,1dp=1.5px
sp:和精度无关的像素,类似于dp


获取屏幕尺寸
获取屏幕尺寸步骤
//获取Resources对象         

Resources res = getResources();

//获取DisplayMetrics对象,该对象包含了屏幕的尺寸信息       

DisplayMetrics dm = res.getDisplayMetrics();
//获取分辨率
int pixW = dm.widthPixels;
int pixH = dm.heightPixels;
//获取密度(屏幕像素密度 一般计算公式为,由屏幕长宽的分辨率,根据勾股定律求出对角线的像素数,再除以屏幕的尺寸)
int densityDpi = dm.densityDpi;
//获取密度(density值表示每英寸有多少个显示点)
float density = dm.density;


Layout自适应
直接使用确定的大小作为layout资源目录的末字符(高x宽) 
比如:layout-640x360资源目录。此时,如果程序运行在640x360分辨率的手机上

首先尝试从layout-640x360资源目录中获取布局资源。 
如果没有获取到对应的资源,再从layout资源目录中获取。 
如果在layout资源目录中也没有获取到对应的资源,抛出异常。
drawable自适应


直接将屏幕的像素密度作为drawable资源目录的末字符
drawable-ldpi:(120dpi-160dpi) 
drawable-mdpi:(160dpi-240dpi) 
drawable-hdpi:(240dpi-320dpi) 
drawable-xhdpi:(320dpi-480dpi)
如果在一个160dpi的手机上使用一个图片资源

系统首先尝试从drawable-mdpi中查找该资源 
如果没有找到,就尝试从较高分辨率中查找该资源,如果找到了资源,系统会将该图片缩小,然后显示。 
如果在高分辨率中没有查找到该资源,继续从较低分辨率中查找,如果找到了,系统会将该图片放大,然后显示。
values自适应


在values资源目录中可以放置一些尺寸信息或者文本信息,通过将具体尺寸作为文件夹末字符的方法,实现自适应(和Layout的自适应相似) 
比如:values-640x360资源目录。

此时,如果程序运行在640x360分辨率的手机上

首先尝试从values-640x360资源目录中获取资源。 
如果没有获取到对应的资源,再从values资源目录中获取。 
如果在values资源目录中也没有获取到对应的资源,抛出异常。


横竖屏自适应
可以在资源文件目录末尾追加land或者port来自适应横竖屏。
land:横屏 
port:竖屏


屏幕适配的一些建议
给Activity规定一种现实方向。 
多用权重来表示尺寸。 
不要使用绝对布局。


对于图片的适配,不需要为每一种像素密度都配置一套图片,这样会使APK变得很大。只需要为几种典型的像素密度配置即可,因为,即使没有图片的图片,系统也会从其他像素密度的资源目录中找,而且会进行一定比例的缩放。

——————————————————————————————————————————————————————————————————

最后附上最全的参考链接


完整屏幕适配方案,链接如下:


http://www.cocoachina.com/android/20151030/13971.html



0 0
原创粉丝点击