Android屏幕适配

1、 android开发时会涉及到多屏幕适应的问题。

如果你的开发环境的sdk版本是android3.2以及以上的版本便可以用这个sw属性对设备进行区分。600dp的含义是:代表这个设备的最短的那一边。以我手上的平板为例(分辨率是1024x720,密度是1)。求这个设备的最短边。可能有人说是720。这个答案是不正确的。答案是768,这个答案随着设备不同而不同。

获取设备的最短边的代码是:


Configuration config = getResources().getConfiguration();

int  smallestScreenWidth = config.smallestScreenWidthDp;

这样就获取了设备的最短边了。这个时候拿smallestScreenWidth 与600想比较就可以知道该设备能否读取里面的资源了。

2、api文档的说明

先解释几个概念:

1、dpi(dot per inch),

即每英寸像素所有的android设备都会被分成120(low)、160(medium)、240(high)、320(xhigh)四种,后来随着市场上android设备越来越多,google官方又增加了213(Added in API level13),480(Added in API level16),640(Added in API level18),三种dpi。比如320x240分辨率的屏幕物理尺寸2英寸*1.5英寸,dpi=160;

2、dp或dip(density-independent pixel)

逻辑密度计算单位,与像素的换算方式为px=dp*(dpi/160)。

在android3.2以前,所有的资源文件都有相应的xhdpi,hdpi,mdpi,ldpi四种文件来对应,android3.2以后,为了提供更精准的对布局文件的控制,可以通过为资源文件(res目录下文件)增加后缀来指定该文件夹里的xml布局文件或color.xml,string.xml是为哪种大小的屏幕使用。

第一种: swdp

如layout-sw600dp, values-sw600dp

这里的sw代表smallwidth的意思,横竖屏切换时较小的screenWidthDp。当你设备的smallestScreenWidth值大约N时,屏幕就会自动到带sw600dp后缀的资源文件里去寻找相关资源文件,每个屏幕都是固定的,不会随着屏幕横向纵向改变而改变。

第二种后缀: wdp

如layout-w600dp, values-w600dp

带这样后缀的资源文件的资源文件制定了getResources().getConfiguration().screenWidthDp大于Ndp的情况下使用该资源文件,但它和swdp不同的是,当屏幕横向纵向切换时,screenWidthDp是变化的,以变化后的宽度来与N相比,看是否使用此资源文件下的资源。

第三种后缀: hdp

如layout-h600dp, values-h600dp

这个后缀的使用方式和wdp一样,随着屏幕横纵向的变化,屏幕高度也会变化,根据变化后的高度值来判断是否使用hdp ,但这种方式很少使用,因为屏幕在纵向上通常能够滚动导致长度变化,不像宽度那样基本固定,因为这个方法灵活性不是很好,google官方文档建议尽量少使用这种方式。

你可能感兴趣的:(Android屏幕适配)