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






原创粉丝点击