开发适应屏幕的apk应用


1 开发自适应屏幕的乐 Phone/Phone/Phone/Phone/乐Pad Pad Pad Pad 应用 序: 乐Phone 手机屏幕大小不一,分辨率有 320x480,480x800,怎样才能让 App 自动适应不同的屏幕呢? 乐Pad 也有如此情况,目前上市的分辨率是 1280x800, 以后如果出同比增大的屏幕,这样该如何处理呢? 本文档就这一话题,为广大乐 phone/乐Pad 开发者提供程序屏幕自适应的开 发技巧说明。 2 一.基础概念说明: 1.1.1.1.术语: 2.2.2.2.分辨率单位:pxpxpxpx、dipdipdipdip、dpdpdpdp、spspspsp 3.3.3.3.提示: Android1.6 或以上 SDK,在AndroidManifest.xml 中提供新的一个元素 用于支持多屏幕机制。 1.Screen size 屏幕实际尺寸。 Android 讲屏幕实际尺寸分为 3个通用的尺寸。 2.Aspect ratio 长宽比 3.Resolution 分辨率 4.Density 密度 5.Density-independent pixel 密度无关的像素 px (pixels)像素 一般我们 HVGA 代表 320x480 像素,这个用 的比较多 dip 或dp (device independent pixels)设备独立 像素 这个和设备硬件有关,一般我们为了支持 WVGA、HVGA 和QVGA cwj 推荐使用这个 , 不依赖像素。 sp (scaled pixels — best for text size)放大像素 主要处理字体的大小 3 4.4.4.4.屏幕大小: (1111):不同的 layoutlayoutlayoutlayout 如图1111: (2222)hdpihdpihdpihdpi、mdpimdpimdpimdpi、ldpildpildpildpi 如图2222: 需要在 res 目录下创建不同的 layout 文件夹,比如 layout-640x360,layout-800x480,所有的 layout 文件在编译之后都会写入 R.java 里,而系统会根据屏幕的大小自己选择合适的 layout 进行使用。 2.1 版本以后 res 下就有了 drawable-mdpi、drawable-ldpi、drawable-hdpi 三个图片文件夹 , 这三个主要是为了支持多分辨率。 drawable- hdpi、drawable- mdpi、drawable-ldpi 的区别: (1)drawable-hdpi 里面存放高分辨率的图片,如WVGA(480x800),FWVGA (480x854) (2)drawable-mdpi 里面存放中等分辨率的图片,如HVGA(320x480) (3)drawable-ldpi 里面存放低分辨率的图片,如QVGA(240x320) 系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。 在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本 图片。 4 二.Android Android Android Android 提供3333种方式处理屏幕自适应 (1111)预缩放的资源((((基于尺寸和密度去寻找图片)))) (2222)自动缩放的像素尺寸和坐标((((密度兼容)))) (3333)兼容模式显示在大屏幕,尺寸((((尺寸兼容)))) 解释: 密度独立(分辨率采用 dip 单 位 ): 系统默认应用支持 DIP 单位的,三个使用 DIP 的地方: 1.如果找到相应的尺寸和密度,则利用这些图片进行无缩放小时。 2.如果没法找到相应的尺寸,而找到密度,则认为该图片尺寸为 "medium",利用缩放这个 图片显示。 3.如果都无法匹配,则使用默认图片进行缩放显示。默认图片默认标配 "medium" (160)。 1.如果应用程序不支持不同密度 Android:anyDensity="false",系统自动缩放图片尺寸和这个 图片的坐标。(代码中体现) 2.对于预缩放的资源,当 Android:anyDensity="false",也不生效。 3.Android:anyDensity="false",只对密度兼容起作用,尺寸兼容没效果 1.对于你在声明不支持的大屏幕,而这个屏幕尺寸是 normal 的话,系统使 用尺寸为("normal")和密度为("medium)显示。 2. 对于你在声明不支持的大屏幕,而这个屏幕尺寸是 larger 的话,系统同 样使用尺寸为("normal")和密度为("medium)显示,不过会出现一层黑色的背景。不是居中显 示。 1.加载资源时,使用 DIP 实现预缩放的资源。 2.在Layout 使用 DIP,系统自动完成缩放。 5 3.在应用程序中,自动缩放一些绝对像素。 (只有在 Android:anyDensity="false"生效)即屏幕自适应方式二 4.像素单位都使用 DIP,文本单位使用 SP 6 三.最佳屏幕独立实践 1.使用 wrap_content, fill_parent 和使用 dip 作为像素单位 in XML layout files。 2.避免使用 AbsoluteLayout 3.在代码中,不要使用像素数字硬编码,而是要通过 dip 转换为 px。 例子: ----你使用手势分析器分析一个 scroll scroll scroll scroll 手势,假如,你滚动的距离是 16px----16px----16px----16px---- 1.在一个 160dip 的屏幕中,你实际移动距离 16px / 160dpi = 1/10th of an inch (or 2.5 mm) 2.在一个 240dip 的屏幕中,你实际移动距离 16px / 240dpi = 1/15th of an inch (or 1.7 mm) //Thegesturethresholdexpressedindip privateprivateprivateprivatestaticstaticstaticstaticfinalfinalfinalfinalfloatfloatfloatfloatGESTURE_THRESHOLD_DIP=16.0f; //Convertthedipstopixels ffffinalinalinalinalfloatfloatfloatfloatscale =getContext().getResources().getDisplayMetrics().density; mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale); 4.使用密度和/或尺寸特定资源(通过文件夹) 7 四.关于预缩放或者自动缩放图片或 9999格图(xxxx.9.png)(xxxx.9.png)(xxxx.9.png)(xxxx.9.png) 附录: 联想应用商店期待您的加入!!!! 一起创造伟大的程序吧! 联想应用商店: www.lenovomm.comwww.lenovomm.comwww.lenovomm.comwww.lenovomm.com 联想开发者社区: http://developer.lenovomm.com/developer/http://developer.lenovomm.com/developer/http://developer.lenovomm.com/developer/http://developer.lenovomm.com/developer/ 1.系统是一定对会资源包下的图片进行合理的缩放。 例如:一张 240x240 高密度图片,显示在中密度的屏幕上,图片大小自动变为 160x160。 2.你在 API 中不会得到被缩放后的图片尺寸,得到还是你原来图片的尺寸。 3.如果你不想系统自动帮你缩放图片,可以建立一个 res/drawable-nodpi 文件夹,存放你的图 片。 4.也可以通过 BitmapFactory.Options 完成系统自动缩放图片或 9格图(在画图时)。 联想目前的产品分辨率: Phone:800x480,480x320 Pad: 1280x800,1024x600 如后续出新产品,也均为等比更换,所以请开发者注意此类问题. 8
还剩7页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

woshiwxw

贡献于2015-07-01

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf