产品推荐:水表|流量计|压力变送器|热电偶|液位计|冷热冲击试验箱|水质分析|光谱仪|试验机|试验箱


仪表网>技术中心>应用设计>正文

欢迎联系我

有什么可以帮您? 在线咨询

Android平台的多分辨率屏显设计及其兼容性测试

   2012年05月08日 16:28  
  摘要:本文首先介绍Android平台的系统架构及资源管理方法,之后介绍目前在处理多分辨率时采用的方法,而后重点分析Android平台资源加载机制并且结合实例给出多分辨率的处理步骤及技巧,zui后介绍测试多分辨率效果的方法。
  
  引言
  
  2007年11月,Google公司发布基于Linux2.6内核的移动终端操作系统-Android,由于其开源性,得到很多手机厂商的追捧和应用的青睐。近年来智能手机发展迅速,运行速度、存储容量和可靠性等指标有了显着提高[1],当今的智能手机用户对应用软件的舒适性和美观性有了更大的期望,应用程序界面友好性已经越来越重要。但是由于Android的开源性,硬件厂商屏幕分辨率不统一,据统计目前市场上Android系统手机的分辨率有10余种,分辨率分布如此广泛使得在处理多分辨率适应方面遇到了不少难题。文章首先介绍Android平台的系统架构及资源管理方法,之后介绍目前在处理多分辨率时采用的方法,而后重点分析Android平台资源加载机制并且结合实例给出多分辨率的处理步骤及技巧,zui后介绍测试多分辨率效果的方法。
  
  1、Android平台简介
  
  Android是一个包括操作系统、中间件和关键应用的移动设备软件堆[2],Android系统和其他系统一样,采用分层的架构。由下至上依此为Linux操作系统和驱动、程序库及Android运行时环境、应用程序框架层、应用层。Android应用程序的基本组件有Activity、Intent、BroadcaSTReceiver、Service四种,各个组件的配置信息以及权限管理、版本管理等配置信息都保存在AndroidManifest.xml中。
  
  1.1Android应用程序资源管理
  
  手机界面上加载的图片是Android资源的一种,除此之外还有XML资源(anim.xmllayout.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就是采用这种方式,为一款应用提供多个分辨率版本,用户根据自己的需求下载安装相应的可执行文件。针对每一种屏幕单独开发应用程序不失为一种好方法,但是目前GoogleMarket对一个应用程序多个分辨率版本的支持还不完善,还是需要尽可能使用一个apk文件适应多个分辨率。
  
  2、多分辨率处理方案详解
  
  2.1基本术语介绍
  
  2.1.1屏幕尺寸
  
  真正的物理尺寸,屏幕对角线的长度,单位是英寸。为了简化起见,Android把支持的所有物理尺寸分成了4组:small,normal,large,extralarge.
  
  2.1.2屏幕密度Density
  
  一定物理范围的像素的个数,单位通常是dpi(dotsperinch),即每英寸的点数。例如一个低分辨率屏幕相对于高分辨率屏幕在一定的物理区域内包含的像素点要少。为了简化起见,Android将所有的屏幕密度分成四组:low,medium,high和extrahigh.
  
  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,extralarge;按照屏幕密度分为四组low,medium,high和extrahigh,其分界线如图1所示。
  
  图1Android中的屏幕分类
  
  为了优化程序UI,让其适应多种分辨率并能清晰显示,一般情况下需要为不同屏幕大小密度提供不同的图片文件和对应的布局文件,在运行的时候,Android系统会根据当前设备的屏幕大小及密度等信息,选择加载其中一套匹配的资源加以运行,从而达到适应多分辨率的效果。
  
  2.3Android支持多分辨率原理及步骤
  
  由以上分析,默认的加载方式都不能很好地适应不同的分辨率,Android从1.6开始支持多种分辨率的处理,原理简而言之就是根据屏幕参数,动态加载资源文件。在Android项目文件结构中,drawable文件夹下包含三个子文件夹,分别为drawable-hdpi,drawable-mdpi,drawable-ldpi,分别存放hdpi,mdpi,ldip的位图。应用程序运行时,Android系统会根据当前设备的屏幕大小、分辨率、屏幕密度、方向、长宽比等信息,选择相应文件夹进行加载。Android配置修饰符的定义规则如下:
  
  1)在res文件夹下新建目录,命名为<resources_name>-<qualifier>这种格式,其中<resources_name>为标准资源名称,例如drawable或者layout;<qualifier>即修饰符,对应的屏幕参数,比如normal/small/large,hdpi/mdpi/ldpi,land/port,long/notlong等。
  
  2)在步骤1新建的文件夹中存入相应的资源,比如位图资源或者layout资源,资源文件的名字必须与默认资源文件的名字相同。例如:
  
  3)Android系统支持多分辨率的机制离不开Android-Manifest.xml文件的supports-screen元素,若应用程序要适应多种分辨率,需要将anyDensity设置为true.
  
  2.4界面设计技巧
  
  前面的部分已经详细讲解了如何架构应用程序使其更好地适应多种分辨率屏幕,此外,在界面设计和控制中我们还应该掌握一些原则或者技巧,从而使应用程序界面友好、适应性强。
  
  1)在XMLlayout文件中定义长度的时候,使用wrap_content,fill_parent,或者dp进行描述,这样可以保证在屏幕上面展示的时候有合适的大小。例如,一个viewlayout_width="100dip",在HVGA@160density的设备上显示100个px,而在WVGA@240density的设备上显示150个px,但是所占的物理尺寸时相同的。
  
  2)在Activity或者其他控制视图加载的代码处,不要使用像素单位的硬编码。
  
  3)不要使用Absoluayout.布局是由AndroidUItoolkit提供的布局容器中的一种。但是与其他layout不一样的是,Absoluayout使用固定的位置表示,使得在不同的屏幕上面显示效果不好,因此Absoluayout在sdk1.6及以后的版本中被弃用了。
  
  4)为不同屏幕密度的手机,提供不同的位图资源,可以使得界面清晰无缩放。
  
  3、多分辨率兼容性测试方案
  
  在产品发行之前,要在所有的目标手机上进行全面的测试。AndroidSDK包含了一套测试多分辨率的机制。可以自己定制avd作为应用程序的测试环境,avd会模拟真实机器的屏幕大小和密度。例如图2为模拟器的列表,可以将程序运行在这四个模拟器中进行多分辨率的测试。
  
  图2虚拟机列表
  
  4、结论
  
  本文介绍Android平台的体系架构和分辨率相关的术语,详细论述资源加载原理和多分辨率处理的详细流程,zui后给出了测试应用程序是否适应多种分辨率的方法。结合本人实践经验进行讲述,内容深入浅出,较完整地论述了如何使应用程序尽可能多地适应多种分辨率屏幕。

免责声明

  • 凡本网注明“来源:仪表网”的所有作品,均为浙江兴旺宝明通网络有限公司-仪表网合法拥有版权或有权使用的作品,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:仪表网”。违反上述声明者,本网将追究其相关法律责任。
  • 本网转载并注明自其它来源(非仪表网)的作品,目的在于传递更多信息,并不代表本网赞同其观点或和对其真实性负责,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品第一来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
联系我们

客服热线: 15267989561

加盟热线: 15267989561

媒体合作: 0571-87759945

投诉热线: 0571-87759942

关注我们
  • 下载仪表站APP

  • Ybzhan手机版

  • Ybzhan公众号

  • Ybzhan小程序

企业未开通此功能
详询客服 : 0571-87759942