资料介绍
2007 年11 月,Google 公司发布基于Linux2.6 内核的移动终端操作系统- Android, 由于其开源性, 得到很多手机厂商的追捧和应用开发者的青睐。近年来智能手机发展迅速,运行速度、存储容量和可靠性等指标有了显着提高[1],当今的智能手机用户对应用软件的舒适性和美观性有了更大的期望,应用程序界面友好性已经越来越重要。但是由于Android 的开源性,硬件厂商屏幕分辨率不统一,据统计目前市场上Android系统手机的分辨率有10 余种,分辨率分布如此广泛使得开发者在处理多分辨率适应方面遇到了不少难题。文章首先介绍Android 平台的系统架构及资源管理方法,之后介绍目前开发者在处理多分辨率时采用的方法,而后重点分析Android 平台资源加载机制并且结合实例给出多分辨率的处理步骤及技巧,最后介绍测试多分辨率效果的方法。
1 Android 平台简介
Android 是一个包括操作系统、中间件和关键应用的移动设备软件堆[2],Android 系统和其他系统一样,采用分层的架构。由下至上依此为Linux 操作系统和驱动、程序库及Android 运行时环境、应用程序框架层、应用层。 Android 应用程序的基本组件有Activity、Intent、BroadcaSTReceiver、Service 四种,各个组件的配置信息以及权限管理、版本管理等配置信息都保存在AndroidManifest.xml 中。
1.1 Android 应用程序资源管理
手机界面上加载的图片是Android 资源的一种,除此之外还有XML 资源(anim.xml layout.xml 等) 以及原数据文件( 音视频文件等)[3]。新建一个HelloAndroid 的Android 应用程序,默认生成的文件架构包含src,gen,assets,res 等文件夹,以及AndroidManifest.xml 配置文件。src 文件夹中保存的是Android 源代码,res 文件夹代表应用程序需要使用到的资源文件,gen 包中包含R.java 文件。Res 文件夹中包含的所有资源文件都对应在R.java 中。
当开发者在res/ 目录中任何一个子目录中添加相应类型的文件之后,ADT 会在R.java 文件中相应的匿名内部类中国自动生成一条静态int 类型的常量,对添加的文件进行索引。
Android 系统采取这种架构使视图等资源文件与控制代码分离,实现松耦合。然而可以使用R.java 文件在代码中对相应的资源文件进行存取,灵活操作。
1.2 一般多分辨率处理方法及其缺点
1.2.1 图片缩放
基于当前屏幕的精度,平台自动加载任何未经缩放的限定尺寸和精度的图片。如果图片不匹配,平台会加载默认资源并且在放大或者缩小之后可以满足当前界面的显示要求。例如,当前为高精度屏幕,平台会加载高精度资源(如HelloAndroid中drawable-hdpi 中的位图资源),如果没有,平台会将中精度资源缩放至高精度,导致图片显示不清晰。
1.2.2 自动定义像素尺寸和位置
如果程序不支持多种精度屏幕,平台会自动定义像素绝对位置和尺寸值等,这样就能保证元素能和精度160 的屏幕上一样能显示出同样尺寸的效果。例如,要让WVGA 高精度屏幕和传统的HVGA 屏幕一样显示同样尺寸的图片,当程序不支持时,系统会对程序慌称屏幕分辨率为320×480,在(10,10)到(100,100)的区域内绘制图形完成之后,系统会将图形放大到(15,15)到(150,150)的屏幕显示区域。
1.2.3 兼容更大尺寸的屏幕
当前屏幕超过程序所支持屏幕的上限时,定义supportsscreens元素,这样超出显示的基准线时,平台在此显示黑色的背景图。例如,WVGA 中精度屏幕上,如程序不支持这样的大屏幕,系统会谎称是一个320×480 的,多余的显示区域会被填充成黑色。
1.2.4 采用OpenGL 动态绘制图片
Android 底层提供了OpenGL 的接口和方法,可以动态绘制图片,但是这种方式对不熟悉计算机图形学的开发者来讲是一个很大的挑战。一般开发游戏,采用OpenGL 方式。
1.2.5 多个apk 文件
Symbian 和传统的J2ME 就是采用这种方式,为一款应用提供多个分辨率版本,用户根据自己的需求下载安装相应的可执行文件。针对每一种屏幕单独开发应用程序不失为一种好方法,但是目前Google Market 对一个应用程序多个分辨率版本的支持还不完善,开发者还是需要尽可能使用一个apk 文件适应多个分辨率。
2 多分辨率处理方案详解
2.1 基本术语介绍
2.1.1 屏幕尺寸
真正的物理尺寸,屏幕对角线的长度,单位是英寸。为了简化起见,Android 把支持的所有物理尺寸分成了4 组:small,normal, large, extra large.
2.1.2 屏幕密度Density
一定物理范围的像素的个数,单位通常是dpi(dots perinch), 即每英寸的点数。例如一个低分辨率屏幕相对于高分辨率屏幕在一定的物理区域内包含的像素点要少。为了简化起见,Android 将所有的屏幕密度分成四组:low, medium,high 和extra high.
2.1.3 方向Orientation
从用户视角来看的屏幕的方向,Portrait 纵向和Landscape 横向。
2.1.4 分辨率Resolution
屏幕上所有的像素点数目,一般用480*800 的形式来表示。密度无关像素dp: Android 平台中虚拟的像素单位,定义成一种密度无关的形式,像素px 和dp 的转换公式为 px =dp*(dpi/160)。在界面开发中应使用dp 作为像素单位,从而保证在不同的屏幕密度上控件所占的实际px 因密度而自动调整。
2.2 手机屏幕的分类
Android 采用两种标准对屏幕进行分类。按照屏幕尺寸分为四组small, normal, large, extra large;按照屏幕密度分为四组 low, medium ,high 和extra high,其分界线如图1所示。
图1 Android 中的屏幕分类
为了优化程序UI,让其适应多种分辨率并能清晰显示,一般情况下需要为不同屏幕大小密度提供不同的图片文件和对应的布局文件,在运行的时候,Android 系统会根据当前设备的屏幕大小及密度等信息,选择加载其中一套匹配的资源加以运行,从而达到适应多分辨率的效果。
1 Android 平台简介
Android 是一个包括操作系统、中间件和关键应用的移动设备软件堆[2],Android 系统和其他系统一样,采用分层的架构。由下至上依此为Linux 操作系统和驱动、程序库及Android 运行时环境、应用程序框架层、应用层。 Android 应用程序的基本组件有Activity、Intent、BroadcaSTReceiver、Service 四种,各个组件的配置信息以及权限管理、版本管理等配置信息都保存在AndroidManifest.xml 中。
1.1 Android 应用程序资源管理
手机界面上加载的图片是Android 资源的一种,除此之外还有XML 资源(anim.xml layout.xml 等) 以及原数据文件( 音视频文件等)[3]。新建一个HelloAndroid 的Android 应用程序,默认生成的文件架构包含src,gen,assets,res 等文件夹,以及AndroidManifest.xml 配置文件。src 文件夹中保存的是Android 源代码,res 文件夹代表应用程序需要使用到的资源文件,gen 包中包含R.java 文件。Res 文件夹中包含的所有资源文件都对应在R.java 中。
当开发者在res/ 目录中任何一个子目录中添加相应类型的文件之后,ADT 会在R.java 文件中相应的匿名内部类中国自动生成一条静态int 类型的常量,对添加的文件进行索引。
Android 系统采取这种架构使视图等资源文件与控制代码分离,实现松耦合。然而可以使用R.java 文件在代码中对相应的资源文件进行存取,灵活操作。
1.2 一般多分辨率处理方法及其缺点
1.2.1 图片缩放
基于当前屏幕的精度,平台自动加载任何未经缩放的限定尺寸和精度的图片。如果图片不匹配,平台会加载默认资源并且在放大或者缩小之后可以满足当前界面的显示要求。例如,当前为高精度屏幕,平台会加载高精度资源(如HelloAndroid中drawable-hdpi 中的位图资源),如果没有,平台会将中精度资源缩放至高精度,导致图片显示不清晰。
1.2.2 自动定义像素尺寸和位置
如果程序不支持多种精度屏幕,平台会自动定义像素绝对位置和尺寸值等,这样就能保证元素能和精度160 的屏幕上一样能显示出同样尺寸的效果。例如,要让WVGA 高精度屏幕和传统的HVGA 屏幕一样显示同样尺寸的图片,当程序不支持时,系统会对程序慌称屏幕分辨率为320×480,在(10,10)到(100,100)的区域内绘制图形完成之后,系统会将图形放大到(15,15)到(150,150)的屏幕显示区域。
1.2.3 兼容更大尺寸的屏幕
当前屏幕超过程序所支持屏幕的上限时,定义supportsscreens元素,这样超出显示的基准线时,平台在此显示黑色的背景图。例如,WVGA 中精度屏幕上,如程序不支持这样的大屏幕,系统会谎称是一个320×480 的,多余的显示区域会被填充成黑色。
1.2.4 采用OpenGL 动态绘制图片
Android 底层提供了OpenGL 的接口和方法,可以动态绘制图片,但是这种方式对不熟悉计算机图形学的开发者来讲是一个很大的挑战。一般开发游戏,采用OpenGL 方式。
1.2.5 多个apk 文件
Symbian 和传统的J2ME 就是采用这种方式,为一款应用提供多个分辨率版本,用户根据自己的需求下载安装相应的可执行文件。针对每一种屏幕单独开发应用程序不失为一种好方法,但是目前Google Market 对一个应用程序多个分辨率版本的支持还不完善,开发者还是需要尽可能使用一个apk 文件适应多个分辨率。
2 多分辨率处理方案详解
2.1 基本术语介绍
2.1.1 屏幕尺寸
真正的物理尺寸,屏幕对角线的长度,单位是英寸。为了简化起见,Android 把支持的所有物理尺寸分成了4 组:small,normal, large, extra large.
2.1.2 屏幕密度Density
一定物理范围的像素的个数,单位通常是dpi(dots perinch), 即每英寸的点数。例如一个低分辨率屏幕相对于高分辨率屏幕在一定的物理区域内包含的像素点要少。为了简化起见,Android 将所有的屏幕密度分成四组:low, medium,high 和extra high.
2.1.3 方向Orientation
从用户视角来看的屏幕的方向,Portrait 纵向和Landscape 横向。
2.1.4 分辨率Resolution
屏幕上所有的像素点数目,一般用480*800 的形式来表示。密度无关像素dp: Android 平台中虚拟的像素单位,定义成一种密度无关的形式,像素px 和dp 的转换公式为 px =dp*(dpi/160)。在界面开发中应使用dp 作为像素单位,从而保证在不同的屏幕密度上控件所占的实际px 因密度而自动调整。
2.2 手机屏幕的分类
Android 采用两种标准对屏幕进行分类。按照屏幕尺寸分为四组small, normal, large, extra large;按照屏幕密度分为四组 low, medium ,high 和extra high,其分界线如图1所示。
图1 Android 中的屏幕分类
为了优化程序UI,让其适应多种分辨率并能清晰显示,一般情况下需要为不同屏幕大小密度提供不同的图片文件和对应的布局文件,在运行的时候,Android 系统会根据当前设备的屏幕大小及密度等信息,选择加载其中一套匹配的资源加以运行,从而达到适应多分辨率的效果。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- 高频电路原理与分析电子版资源下载 0次下载
- FPGA和Atom混合的可配置平台资料下载
- 将蓝牙mesh作为智能照明平台资料下载
- PLC实例讲解之加法指令写流水灯资源下载 10次下载
- FPGA的硬件电路设计教程和FPGA平台资料简介 163次下载
- Android开发实例免费下载 0次下载
- 一种无线供电的可编程设计超高频射频识别系统的传感平台资料下载 3次下载
- 私有云平台资源监控与优化系统 3次下载
- 基于Android安全总结与分析 3次下载
- 用户友好的Android隐私监管机制 0次下载
- Android恶意软件判定方法 0次下载
- DSP通过FLASH并行加载的分析和实例 7次下载
- 深入剖析Android消息机制 11次下载
- 大华视频监控综合平台一体机开发平台资料 25次下载
- 基于Android的跨平台资源管理系统的研究 16次下载
- 【AWTK使用经验】加载和释放外部图片 294次阅读
- Android安全机制介绍及实践 825次阅读
- 类隔离实现之自定义类加载器的扩展 487次阅读
- 什么是SPI机制 910次阅读
- Android异常日志快速定位分析小技巧 2360次阅读
- AN-2058: ADuCM355用户引导加载程序 803次阅读
- Linux内核的安全性对Android的影响 1109次阅读
- 基于ARM-Linux平台的FPGA程序加载模式浅析 1074次阅读
- 什么是沙箱机制 1.1w次阅读
- Android 异步通信原理机制-- handler 1947次阅读
- Android内存管理机制与分析工具 4446次阅读
- Linux系统的fork运行机制分析 1108次阅读
- 用实例深入阐述双端口分析和回归比分析 6039次阅读
- 卫星频率及轨道资源管理分析 1w次阅读
- 基于Android平台的双网双待的设计方法 2785次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多