Android进阶练习-匹配多种屏幕
来源:互联网 发布:在手机淘宝店怎么进货 编辑:程序博客网 时间:2024/05/18 01:55
Android进阶练习-匹配多种屏幕
这几天学习了Android下应用程序对不同屏幕密度适应的问题,其中涉及到图片资源,布局资源,使用固定尺寸,资源的查找规则等问题
屏幕概念
明确手机屏幕的尺寸、密度、分辨率等几个概念
1, Screen size 屏幕的尺寸,即对角线长度(单位inch-英寸)
2, Screen density屏幕密度,即单位长度像素点数(pots/inches)
3, Resolution 分辨率,即屏幕的总像素点数(width * height)
4, Density-independent pixel (dp)独立像素密度。标准是160dip.即1dp对应1个pixel,计算公式如:px = dp * (dpi / 160),屏幕密度越大,1dp对应的像素点越多,相应的屏幕显示的也更清晰
屏幕的分类
可以根据公式px = dp * (dpi / 160)算出屏幕的高和宽dp表示
应用对应的资源目录为xhdpi,hdpi,mdpi,ldpi
两个手机屏幕分辨率可能相同,但密度有可能差了一个级别,对应的资源目录也就不同了,这点要注意一下
比如提供给我们的模拟器当中5.1"WVAG(480*800:mdpi)和Nexus One(3.7",480*800:hdpi),前者的密度是160,后者的密度为240,但它们的分辨率是一样的
图片资源的匹配
drawable-ldpi 为small密度时,该图片即适用于横屏,也适用于竖屏
drawable-land-ldpi 当屏幕为横屏,且为small密度时,加载此文件夹中的资源
drawable-port-ldpi 当屏幕为竖屏,且为small密度时,加载此文件夹中的资源
drawable-mdpi 为normal密度时,该图片即适用于横屏,也适用于竖屏
drawable-land-mdpi 当屏幕为横屏,且为normal密度时,加载此文件夹中的资源
drawable-port-mdpi 当屏幕为竖屏,且为normal密度时,加载此文件夹中的资源
drawable-hdpi 为large密度时,该图片即适用于横屏,也适用于竖屏
drawable-land-hdpi 当屏幕为横屏,且为large密度时,加载此文件夹中的资源
drawable-port-hdpi 当屏幕为竖屏,且为large密度时,加载此文件夹中的资源
drawable-hdpi 为xlarge密度时,该图片即适用于横屏,也适用于竖屏
drawable-land-hdpi 当屏幕为横屏,且为xlarge密度时,加载此文件夹中的资源
drawable-port-hdpi 当屏幕为竖屏,且为xlarge密度时,加载此文件夹中的资源
需要注意的是当横竖屏切换时,系统会去自动加载对应的资源目录中图片
固定尺寸的适配
有些时候我们避免不了要使用一些固定的尺寸,虽然并不建议这样做,这时我们该怎么做呢
查看google提供的样例应用中发现,原来可以在不同的values目录下,新建dimens.xml文件来进行匹配
<resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name="activity_horizontal_margin">16dp</dimen > <dimen name="activity_vertical_margin">16dp</dimen ></resources>
在layout中使用 @dimens/activity_horizontal_margin 进行引用
values资源目录和drawable资源目录用类似的目录结构来进行屏幕的匹配适应,但由于Android操作系统3.0版本是特定于给PAD使用,PAD上使用values-v11目录来匹配3.0版PAD
values资源目录还可以像这样指定values-sw600dp,意思是说屏幕的最短边要达到600dp才能够进行匹配,但不知道优先级咋样,知道的朋友望告诉一下=.=
其实values目录还有许多其它的作用,可以在不同的分辨率下指定样式,布局layout文件、drawable图片、bool值等
可以下载样例程序:http://www.android-doc.com/training/multiscreen/index.html 来参考
布局资源layout的适配
根据不同的屏幕大小界面可能会不一样,layout资源的匹配和尺寸、图片的匹配大同小异
系统都是根据当前屏幕分辨率特征寻找对应目录下的资源,layout_hdpi、layout_mdpi、layout、layout_ldpi
资源的查找规则
如果有个别资源目录不存在需要引用的资源,那么Android系统会去'相近'资源目录中寻找,以layout为例
如果一个大屏手机适配的话,适配的顺序是layout_hdpi->layout_mdpi->layout->layout_ldpi;
如果一个中屏手机适配的话,适配的顺序是layout_mdpi->layout->layout_hdpi->layout_ldpi;
如果一个小屏手机适配的话,适配的顺序是layout_ldpi->layout->layout_mdpi->layout_hdpi;
Android寻找最佳资源原理
1, 排除与设备设置不符合的资源
2, 根据限定词(qualifier)的优先级,按照顺序查找
3, 在限定词下,是否存在资源路径
4, 排除不包含在限定词中的资源路径
5, 继续执行不同的限定词查找,直到找到相应的资源
根据这种规则,当我们只为应用准备一套资源时,应该放在layout_mdpi目录中,而不是新建layout目录来存放,其它类型资源同理
最后
别忘了在manifestxml进行如下定义,意思是让应用支持相应的分辨率
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" />
参考文章
http://ericbaner.iteye.com/blog/1703217
http://blog.sina.com.cn/s/blog_74c22b210100tn3o.html
http://mikewang.blog.51cto.com/3826268/865304
http://www.cnblogs.com/xiongbo/archive/2011/09/27/2192964.html
- Android进阶练习-匹配多种屏幕
- android支持多种屏幕
- Android UI --支持多种屏幕
- Android如何支持多种屏幕
- Android如何支持多种屏幕
- Android如何支持多种屏幕
- Android如何支持多种屏幕
- android-支持多种屏幕[如何支持多种屏幕] 四
- Android进阶练习一
- Android进阶:获取屏幕参数
- Android如何自适应多种屏幕手机?
- 关于Android的多种屏幕适配
- Android如何自适应多种屏幕手机?
- 关于Android的多种屏幕适配
- Android如何自适应多种屏幕手机?
- 如何让android 支持多种屏幕尺寸
- android设备支持多种屏幕的方法
- 关于Android的多种屏幕适配
- (转)使用Memory Analyzer tool(MAT)分析内存泄漏
- 3.6-java学习第一日
- hdu 1017 A Mathematical Curiosity
- Apache Mod_Rewrite实现URL重写的配置方法
- 关于在java中连接MS SQL Server 2005 JDBC的问题及解决办法
- Android进阶练习-匹配多种屏幕
- iPhone手机和Android手机的对比
- 8.1.2(最大连续和)
- 马克数据
- 记录一下制作cocos2d-x android apk包的过程
- CentOS系统信息查看命令大全
- Spring的配置文件详解
- java关于时间的操作Date与Calendar的使用
- Apache错误页面404、403配置教程