今天研读了一下《Android2高级编程》中的“分辨率和像素密度无关性”一章,启发很多,特来分享。
- 资源框架和分辨率无关性
- 屏幕尺寸和像素密度的资源限定符
- 屏幕尺寸
- small 小于标准的3.2''的屏幕
- medium 典型的智能手机屏幕尺寸
- large 一般为平板电脑的尺寸
- xlarge 一般为TV的尺寸,超大屏幕
- 像素密度 显示屏的像素密度,通常指每英寸点数(dpi) 判断方式:getApplicationContext().getResources().getDisplayMetrics().density;
- ldpi 用于像素密度在100~140之间的低密度资源
- mdpi 用于像素密度在140~180之间的中密度资源
- hdpi 用于像素密度在190~250之间的高密度资源
- xhdpi 用于像素密度大于320的超高密度资源
- nodpi 不管屏幕密度多少都不能伸缩的资源
- 方向
- land 横屏
- port 竖屏
- 纵横比
- long
- notlong 用于具有典型只能手机的纵横比的资源
- 请看图
相同的像素下,不同像素密度(DPI)的图片大小
- 限定符可独立使用,也可以一起使用例如【res/layout-small-long】
- 屏幕尺寸
- 指定支持的屏幕密度
- false值将迫使Android使用兼容性缩放比例来尝正确的缩放应用程序UI。
- anyDensity 当应用程序像是在不同屏幕密度的设备上时候,如何缩放应用程序,考虑编号的像素密度则将属性设为ture
- 屏幕尺寸和像素密度的资源限定符
- 分辨率无关性的最佳实践
- 相对布局和密度无关的像素(大小使用dp、文字使用sp,尽量使用wrap_content和fill_parent)
- 值得一提:一个密度无关的像素(dp)等同于160dpi屏幕上的一个像素,两个密度无关的像素(dp)的在240dpi的屏幕上将显示为3个像素宽
- 使用可缩放图形资源(NinePatch)
- 为不同的屏幕提供优化后的资源
- 相对布局和密度无关的像素(大小使用dp、文字使用sp,尽量使用wrap_content和fill_parent)
- 反复测试
- Google提供的最佳实践
- 使用wrap_content、fill_parent或dp单元尺寸
- 不要在应用程序代码使用硬编码的像素值
- 不要使用AbsoluteLayout
- 为不同的屏幕密度提供替代不同的资源
- 转载的一些有用信息
- http://my.eoe.cn/appadventure/archive/5580.html
- 使用新的尺寸限定符
- 7寸平板:不要再使用layout-large,使用layout-sw600dp。
- 说明:Nexus 7 = 960 X 600 dp;最小的尺寸是600。
- 10寸平板:不要再使用layout-xlarge,使用layout-sw720dp。
- 说明:Nexus 10 = 1280 X 800 dp;最小的尺寸是800。不过有些10寸的平板像素可能要更小一点,所以这里取720只是我们常用的中间值。
- sw:smallest width,即最小宽度
表示如果屏幕最小尺寸(宽和高中的较小者)大于等于XX的话,系统就指定匹配的这个layout_swXXdp。
- 7寸平板:不要再使用layout-large,使用layout-sw600dp。
- http://my.eoe.cn/appadventure/archive/5580.html