兼容平板可添加values-sw600dp文件夹,添加dimens.xml。
sw600dp 指最短的边的长度为600,这可作为平板的分界线,大平板一般是sw800dp。
layout-sw600dp
这里的sw代表smallwidth的意思,当你的屏幕的绝对宽度大于600dp时,屏幕就会自动调用layout-sw600dp文件夹里面的布局。
注意:这里的绝对宽度是指手机的实际宽度,即与手机是否横屏没关系,也就是手机较小的边的长度。
layout-w600dp
当你的屏幕的相对宽度大于600dp时,屏幕就会自动调用layout-w600dp文件夹里面的布局。
注意:这里的相对宽度是指手机相对放置的宽度;即当手机竖屏时,为较小边的长度;当手机横屏时,为较长边的长度。
layout-h600dp
与layout-w600dp的使用一样,只是这里指的是相对的高度。
当你的屏幕的相对高度大于600dp时,屏幕就会自动调用layout-w600dp文件夹里面的布局。
注意:这里的相对高度是指手机相对放置的高度;即当手机竖屏时,为较长边的长度;当手机横屏时,为较小边的长度。但这种方式很少使用,因为屏幕在相对高度上,即在纵向上通常能够滚动导致长度变化,而不像横向那样基本固定,因而这个方法灵活性差,google官方文档建议尽量使用这种方式。
adb shell wm size 获取分辨率1280*720
adb shell wm density 获取到dpi 为160
dpi:屏幕像素密度的单位,“dot per inch”的缩写,每英寸有160个像素
dip:Density Independent Pixels(密度无关像素)的缩写。以160dpi为基准,1dp=1px,
获取dip density比例2.0:
DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);float density = dm.density;Log.d("kkklzc","density: "+density);
或者通过计算获得,160dpi/160基准 得到 1.0。
720/2.0 得到sw360dp
1280720 density 2.0 sw360dp 320dpi
1280800 density 1.0 sw800dp 160dpi
1024*600 density 1.0 sw600dp 160dpi
获取屏幕英寸,1英寸=2.54厘米:
DisplayMetrics dm = new DisplayMetrics();this.getWindowManager().getDefaultDisplay().getMetrics(dm);double diagonalPixels = Math.sqrt(Math.pow(dm.widthPixels, 2) + Math.pow(dm.heightPixels, 2));Log.d("kkklzc","英寸: "+diagonalPixels / (160 * dm.density));
密度类型 | 代表的分辨率(px) | 屏幕像素密度(dpi) | 换算(px/dp) | 比例 |
---|---|---|---|---|
低密度(ldpi) | 240x320 | 120 | 1dp=0.75px | 3 |
中密度(mdpi) | 320x480 | 160 | 1dp=1px | 4 |
高密度(hdpi) | 480x800 | 240 | 1dp=1.5px | 6 |
超高密度(xhdpi) | 720x1280 | 320 | 1dp=2px | 8 |
超超高密度(xxhdpi) | 1080x1920 | 480 | 1dp=3px | 12 |