Android将屏幕像素密度(DPI)分成四个基本密度:lDPI(低),mDPI(中等),hDPI(高)以及xhDPI(特高)。Android开发人员一般不考虑屏幕的分辨率,而是它的密度。Android应用开发者在定义布局的UI时,会以密度无关像素(DP)的方式表达布局的维度和位置,这样确保UI在不同密度的屏幕上得以正确显示。密度无关像素就相当于160dpi屏幕上的一个物理像素(对于中等密度的屏幕系统来说是基准密度)。例如240 dpi的屏幕上,1个设备独立像素等于1.5物理像素.为确保UI组件在不同的屏幕都能合适的展示,android应用使用设备独立像素单元来定义应用程序的UI。
屏幕尺寸分类和密度分类对比如下:
四种屏幕尺寸分类:: small, normal, large, and xlarge
四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)
需要注意的是:xhdpi是从 Android 2.2 才开始增加的分类。xlarge是从Android 2.3 (API Level 9)才开始增加的分类。如上图所示,一般情况下的普通屏幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi
Android应用程序在 DPI 类别不同的设备上运行,整个应用程序会自动地缩放,让 UI 在此设备上以大体相同的物理大小出现。例如示例文件包含 TwitterTrendsFinal.fxp。在这个示例项目中,applicationDPI 设置为 160,针对 160 DPI 屏幕适当地确定了各个布局值的大小(比如TweetsView 列表中的 iconWidth 和 iconHeight 以及 UserInfoView 中的 padding/gaps)。在 160 DPI 设备上(比如 Motorola Droid Pro),应用程序采用指定的大小。在 240 DPI 设备上(比如 Droid X 或 Droid 2),应用程序统一地放大 50%。图 1 按绝对像素数对比 160 DPI 屏幕与 240 DPI 屏幕的大小。图 2 显示相同的屏幕截图,但是 240 DPI 图像已经变小了,显示相近的物理大小。设计应用所有的值针对 160 DPI 的值;在 stage 级上应用缩放。
图1. 320 x 480 160 DPI(左)和 480 x 800 240 DPI(右)上的实际像素
图2.320 x 480 160 DPI(左)和 480 x 800 240 DPI(右)上的物理大小
注意,由于矢量绘制会产生痕迹,一般来说最好是放大而不是缩小。因此,最好针对低的密度(比如 160 DPI)进行设计,让应用程序在高密度设备上放大。
又比如:applicationDPI是 160 在 Design View 中选择 Google Nexus S 作为预览设备,那么 Design View 会把应用程序放大 50%,按 Nexus S 的尺寸显示它。这意味着中的 1 像素现在对应于 Design View 中的 1.5 像素(见图 3)。
图3.在 Design View 中使用设备配置
应用程序根据不同的密度自动地缩放时,矢量缩放并不包括文本,而是缩放字体大小,从而以不同的大小显示保真度很高的文本。但是,位图会被缩放。这并不好,因为放大位图通常会产生不可接受的痕迹。例如从基准线设计的屏幕(记住基线布局设置在320*480)上获取了一个100*100像素的位图图标。将相同的100*100图标配置在lDPI屏幕,该图标会显得很大很模糊。同样地,将其配置在hDPI屏幕上,它会显得太小(由于设备的每英寸的点数比mDPI屏幕多),如下图所示:
要调整不同的设备屏幕密度,我们需要在四个密度大小之间按照3:4:6:8缩放比例。使用这些比率,通过简单的计算,android创造四个不同的版本的位图,以供开发生产:
· 做完了所有图像后,android按照以下方法归类图片:
· 推荐的文件夹及文件的归类和命名方法。在准备星型图片时,可以将所有未完成的图片命名为ic_star,不需要对应密度来换名称。
Android系统也提供人工管理资源的方式:如下所示
Android pad定制资源文件,则res目录下的目录可能为:
drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-nodpi
drawable-nodpi-1024×600
drawable-nodpi-1280×800
drawable-nodpi-800×480
values
values-ldpi
values-mdpi
values-hdpi
values-xhdpi
values-nodpi
values-nodpi-1024×600
values-nodpi-1280×800
values-nodpi-800×480