Framework资源加载

framework资源加载
主要参考链接:

http://blog.csdn.net/benw1988/article/details/6871244

http://hualang.iteye.com/blog/1304054

http://blog.csdn.net/kangyaping/article/details/7369145

http://dyingbleed.iteye.com/blog/1232723

移动平台对移动设备屏幕尺寸和分辨率多样化的支持

—Android平台 && IOS平台

1. 几个概念:

屏幕尺寸:手机的屏幕尺寸就是手机外形的物理大小,即屏幕的对角线测量。

像素:原本的定义是——基本原色素及其灰度的基本编码,在计算机领域,通常将其抽象为一个点。

分辨率:是指显示器所能显示的像素的多少,具体是指单位长度内包含的像素点的数量,单位通常为ppi。

屏幕密度:设备单位尺寸里所包含的像素数目,单位为dpi,即每英寸的像素点数。

  1. Android平台的兼容

2.1 Android平台设备的分类

Android将设备按屏幕尺寸分为四类:xlarge(960dp720dp),large(640dp480dp),normal(470dp320dp),small(426dp320dp)

Android将设备按屏幕密度分为四类:xhdpi(320dpi),hdpi(240dpi),mdpi(160dpi),ldpi(120dpi)

2.2 Android平台的独立像素概念

独立像素,也即密度无关像素(dip——density-independent pixel),以dp为单位,是一个虚拟的像素单元,供开发者来定义UI的布局,表达布局的尺寸或者位置。

系统默认mdpi为基准,即相当于一个160dpi的屏幕,则可通过公式dip/pixel = dpi/160来计算dip的值。

2.3 Android平台实现独立密度的方法

Android平台有两种方法实现独立密度:

使用dp作为UI布局控件位置的单位,通过公式计算得到符合当前屏幕密度的像素值;

缩放位图到合适的大小,来符合当前的屏幕密度。开发者提供不同分辨率的位图,以避免图片被过度放大而显得模糊。

2.4 Android实现支持多屏幕尺寸的具体方法

在manifest中明确的指出你的应用所支持的屏幕。只有屏幕尺寸相适应的设备才能下载,或者屏幕兼容模式的设备下载,再适应。

对不同的屏幕尺寸提供不同的layout,采用<layout-标签>作为文件夹名称,例如layout-xlarge/。在android3.2平台以上,提供swdp格式,来表示所需的最小的硬件配置,比如layout-sw600dp/。

在drawable中提供不同分辨率的位图(.png,.jpg,.gif,.9.png),使用<drawable-标签>形式作为文件夹名称,例如drawable-hdpi

2.5 Android系统在运行时对多屏幕尺寸的支持机制

系统首先在备选资源里寻找合适的资源,即,比如是高密度屏幕,则通过drawable-hdpi去寻找资源;

如果不能通过上述方法找到资源,则说明系统并没有分类提供这些合适的资源,因而,需要将默认路径的资源图片(存放在drawable中)进行缩放,来适应当前的屏幕密度。

位图的缩放比例为:3:4:6:8,依次对应低、中、高、超高。

2.6 Android系统选择最佳适配资源的实现

Android对一个资源的加载是framework中一系列函数的调用链

最后决定系统加载哪个文件是由Resources.getValue(int id,TypeValue

outValue,boolean resolveRefs)调用完成之后的outValue.string决定的。

AssetManager.loadResourceValue()调的是android_util_AssetManager.cpp里面的native方法,native方法通过以下几种途径获取outValue值:

a) 调用ResourceTypes.cpp 的ResTable::getResource(),遍历所有资源文件

b) 在ResTable::getResource()里面调用ResTable::getEntry()来确定资源文件来自哪个entry

c) 在ResTable::getEntry()里面:

    i.      首先获取本设备的configurion信息

   ii.      根据得到的本设备的configurion信息,过滤掉不适应本设备的entry

 iii.      对过滤后的resource进行最佳适配,找到最符合的entry文件。实现在ResourceTypes.h中ResTable_config的isBetterThan()函数中。

[http://www.cnblogs.com/melaniedeng/archive/2012/05/17/2506869.html]

2.7 Android系统屏幕的兼容模式

Version1(android1.6–3.1):

在当前设备中,系统按照正常的手机屏幕尺寸大小(320dp*480dp)来绘制layout,其余空出来的屏幕的部分,则以黑色边界填充。这种方法目前已不经常使用。

Version2(android3.2及以上):

在当前设备中,系统按照正常的手机屏幕尺寸大小(320dp*480dp)来绘制layout,然后将其放大至可以填充整个设备的屏幕。这种方法,自然会引起图片的模糊。可以用户自己进行设置,或者开发人员设置在当前应用中禁止关闭兼容模式。

2.8 Android屏幕兼容模式的启动与关闭方法

启动屏幕兼容模式的两种方法:

a) 在manifest文件中设置

这表示,你的应用程序的最小屏幕宽度的上限为320,因此,当任何设备最小边的长度大于320时,则屏幕兼容模式便作为用户选项的一部分。

b) 当应用程序在为大屏幕重新绘图的时候产生功能障碍,但是,你又想让用户使用屏幕兼容模式,因此,你可以使用<supports-screens android:largestWidthLimitDp=”320”/>,

这里不允许用户关闭兼容模式。

关闭屏幕兼容模式的两种方法:

a) 通过manifest文件设置,这个和的值无关。

b) 将中androidtargetSdkVersion的值设为11或更高,表示支持大屏

  1. IOS平台的兼容

3.1 历代iPhone配置概况

iPhone:3.5英寸屏幕,480320像素,11561*11.6mm

iPhone 3G:3.5英寸屏幕,480320像素,115.562.1*12.3mm

iPhone 3GS:3.5英寸屏幕,480320像素,115.562.1*12.3mm

iPhone4:3.5英寸屏幕,960640像素,115.258.6*9.3mm

iPhone4S: 3.5英寸屏幕,960640像素,115.258.6*9.3mm

iPhone5:4英寸屏幕,1136640像素,123.858.6*7.6mm

3.2 分辨率兼容性问题

相较于搭载Android系统手机的多样性,搭载iOS平台的iPhone在分辨率上遇到的问题较少,主要集中在:

高分辨率显示屏的应用:视网膜(Retina)显示技术

屏幕尺寸的改变:3.5英寸(1.5:1)→4英寸(1.775:1)

3.3 高分辨率

视网膜(Retina)屏幕是苹果公司在部分移动产品上使用的一种显示技术。

第一次被人们熟知,是苹果将其用在iphone 4手机上,它将960×640的分辨率压缩到一个3.5英寸的显示屏内。

也就是说,该屏幕的像素密度达到326像素/英寸(ppi),称之为“视网膜屏幕”。

通常电脑显示屏幕的分辨率为72ppi,iPhone 4的分辨率为电脑的4倍多。由于其具备超高像素密度的液晶屏,因此屏幕显示异常清晰、锐利。

3.4 高分辨率兼容问题

低分辨率的程序在高分辨率的终端上运行会怎样?

图片、文字方面可能显示不清晰,产生如锯齿等效果。

程序整体布局方面,可能产生拉伸变形、不能全屏显示等问题。

应用程序和软件产品通常会在这样的终端变得面目全非。

而这显然给用户的使用带来了严重的问题,直接导致的问题如:操作易用性Usability、功能可接近性Accessibility、文本可读性Readability 等。

为了提高用户体验,2012年,苹果要求任何需要提交更新或全新上架的应用的开发者,提交支持视网膜显示屏分辨率的应用截图,也就是说,截图像素需要大于或等于960*480像素。

屏幕尺寸改变的问题,主要针对于iPhone 5。

众所周知,iPhone 5一改数代iPhone 3.5英寸的屏幕尺寸,变为4英寸,这使得很大一部分app应用,无法对其进行完美支持。

Phone 5的分辨率相较以前有了十分大的改变——iPhone 5的分辨率为1136640像素,和iPhone 4/4S的960640相比,纵向多了176个像素。

旧版的iOS App都是基于960*640的分辨率开发,而多出来的176像素会让旧版App运行在iPhone 5时,出现拉伸、黑边等不完美的现象。

苹果在日前发布公告称从5月1日开始所有APP Store中的iPhone上的应用必须能够支持iPhone 5,否则将会做下架处理。

3.5 解决方案

要让应用程序在高分辨率和不同尺寸的屏幕下,显示仍然保持正常可视,重点需要解决四个方面的问题:

文本和字体

图像(图形、图标和鼠标指针)

版面设置

重绘

文本、字体和图像的调整?

文本和图像如果本身分辨率较低,则缩放之后很可能失真。

为了适应更高的分辨率,需要对程序自身的文字、图片等要素进行调整。

版面设置的调整?

面对不同分辨率的屏幕:

如果使用绝对布局,则在较低分辨率的终端上运行很可能界面显示不完全,或者程序崩溃;而在较高分辨率的终端上,可能界面只能占据屏幕的一部分,而不能获得很好的用户体验。

如果使用相对布局,则界面可能由于拉伸而产生变形。比如iPhone4 app的布局应用到iPhone5上。

为了解决这个问题,可以参考使用iOS的自动布局方式,或者开发几套不同的布局,识别硬件设备后自动进行匹配使用。

4. 总结

未来显示技术发展方向:

超级屏方向:超高ppi,超清显示。

高分辨率方向:超高分辨率,更丰富的内容显示。

3D方向:立体化显示,效果更逼真。

软性显示:屏幕软性化,可弯曲显示适用特种场合。

目前来看,随着移动设备(智能手机、平板电脑等)的爆炸式发展,超极屏是近几年重点发展的显示技术。

因此,手机平台的程序研发需要注重多分辨率,尤其是对高分辨率的支持,以提高用户体验,获得更好的评价和经济效益。

日记本
相关推荐
21道Android高级面试题,面试官都被搞愣了
阅读 4312
准备报考MBA?不能错过的MBA公开课!
广告
Activity 的 36 大难点,你会几个?「建议收藏」
阅读 3048
Android性能优化来龙去脉总结
阅读 1743
腾讯Android社招面试源码相关11题+原理详解
阅读 1443

发布了81 篇原创文章 · 获赞 0 · 访问量 1306

猜你喜欢

转载自blog.csdn.net/qq_42894864/article/details/104044821