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的系统中进行语言切换,所开发的程序也会跟着切换语言。
- Resources resources = getResources();//获得res资源对象
- Configuration config = resources.getConfiguration();//获得设置对象
- DisplayMetrics dm = resources .getDisplayMetrics();//获得屏幕参数:主要是分辨率,像素等。
- config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文
- 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
- Android 国际化与屏幕适配!
- Android 国际化-屏幕适配-样式与主题
- 国际化-屏幕适配-样式与主题
- android的国际化、屏幕适配
- Android国际化和屏幕适配
- Android 国际化以及屏幕适配
- 22-软件国际化、屏幕适配、样式与主题
- Android适配(屏幕适配、国际化适配)
- Android适配(屏幕适配、国际化适配)
- Android应用的国际化、样式和主题、屏幕适配
- android从零开始--国际化、样式和主题、屏幕适配
- 国际化、样式和主题、屏幕适配
- ym——Android从零开始(33)(国际化、样式和主题、屏幕适配)(新)
- Android图片与屏幕适配问题
- Android图片与屏幕适配问题
- ReactNative与Android中的屏幕适配
- ReactNative与Android中的屏幕适配
- 国际化饥和屏幕适配 沉浸式
- krpano限制鼠标放大的比列
- STL适配器之priority_queue
- Spring MVC学习(六)-------注解式控制器详解5
- 上传图片类型限制和防止反复提交,php递归删除空文件夹
- 第七讲:c/c++文件的读取、操作和定位
- Android 国际化与屏幕适配!
- 求质数
- 2017年华为实习生面经
- android DataBinding 的简单使用
- Spring MVC学习(七)-------SpringMVC数据类型转换
- 手把手教你写Linux设备驱动---中断(三)--workqueue实现(基于友善之臂4412开发板)
- scalaJS初探
- PLSQL的安装和配置
- 【压箱底】Android OpenCV人脸检测+蓝牙控制小车