目前android手机的分辨率大体就是帮助文档中描述的几种,咱们能够用两种方式进行不一样手机的适配。一种是在java代码中,另一种是在xml文件中。具体使用哪一种方式更有效更合适,要看具体的状况而定。 php
在之前的项目中,我以前作过关于历史聊天记录,每页显示条数的匹配。不一样的手机,每页能够显示历史记录的条数是不一样的。我采用的是在java代码中作匹配。不一样分辨率的手机,他们都有固定的屏高。例如,480x800,屏高是800,240x320,屏高是320。根据屏高为断定条件,为每一页显示历史记录的条数作一个限制。我我的以为,在java代码中作手机匹配,要看匹配的布局中,控件是否太多,不太多,能够在java代码中根据不一样的状况修改,不然,java代码将会显得很冗长,修改起来也很麻烦。 java
在xml进行手机匹配,主要是针对布局中控件太多,不方便在java代码中修改的状况。在xml中解决不匹配问题很简单,对于不一样手机的分辨率,创建对应的layout文件便可。例如:480x800,之间创建layout-800x400,240x320,创建layout-320x240。特别注意:大的写在前面,例如800,320,小的写在后面,例如480,240。创建了相应的layout后,还要在不一样的手机上调整布局中的控件大小和位置。 android
在本次项目中,我负责不一样手机视图的匹配问题,我选择的是xml匹配方式,结果发现按上面的方式作了以后,对应分辨率的手机的显示没有任何的效果,后来,我查看帮助文档后,发现必需要在androidmainfest中进行以下代码的配置: 布局
< supports-screens spa
android:smallScreens="true" 设计
android:normalScreens="true" orm
android:largeScreens="true" xml
android:xlargeScreens="true" blog
android:anyDensity="true" /> 图片
若是没有这几行代码,无论你怎么调整layout中的控件,对应分辨率的手机是没有任何效果的。注意:因为android版本的不一样,有些版本不支持xlargeScreens,能够直接将android:xlargeScreens="true"去掉。
因为同一个UI元素(如100 x100像素的图片)在高精度的屏幕上要比低精度的屏幕上看起来要小,为了让这两个屏幕上的图片看起来效果差很少,能够采用如下两种方法:
可是屏幕的参数多样化,为每个精度的屏幕都设计一套icon,工做量大而且不能知足程序的兼容 性要求,势必要对屏幕的分级,如在160dpi和 180dpi的手机屏幕上采用同一套icon,当这套icon在240dpi效果知足不了设计要求,就须要另作一套稍大些的icon。
程序能够为这三种尺寸的屏幕提供默认资源,若有须要,还能够为各类精度 的屏幕提供资源。在运行时,系统会根据屏幕布局加载正确尺寸或者精度的图片。
Android的icon尺寸
在运行时,程序为最佳显示效果提供了三种方法:
1.图片缩放
基于当前屏幕的 精度,平台自动加载任何未经缩放的限定尺寸和精度的图片。若是图片不匹配,平台会加载默认资源而且在放大或者缩小以后能够知足当前界面的显示要求。例如, 当前为高精度屏幕,平台会加载高精度资源(如图片),若是没有,平台会将中精度资源缩放至高精度。
2.自动定义像素尺寸和位置
若是程序不支持多种精度屏幕,平台会自动 定义像素绝对位置和尺寸值等,这样就能保证元素能和精度160的屏幕上同样能显示出一样尺寸的效果。例如,要让WVGA高精度屏幕和传统的HVGA 屏 幕同样显示一样尺寸的图片,当程序不支持时,系统会对程序慌称屏幕分辨率为320×533,在(10,10)到(100,100)的区域内绘制图形完成之 后,系统会将图形放大到(15,15)到(150,150)的屏幕显示区域。
3.兼 容更大尺寸的屏幕
当前屏幕超过程序所支持屏幕的上限时,定义supports- screens元素,这样超出显示的基准线时,平台在此显示黑色的背景图。例如,WVGA 中精度屏幕上,如程序不支持这样的大屏幕,系统会谎 称是一个320×480的,多余的显示区域会被填充成黑色。
但为了达到最佳的显示效 果,最好的方法仍是设计多套图片。那就有必要对于全部的屏幕依据精度值进行分级(高中低),以后再设计三套icon: