欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android适配不同的屏幕密度和DPI的方法

程序员文章站 2022-07-14 15:10:12
...

在Android开发中有时会遇到在不同的手机上界面不适配的问题,控件忽大忽小,而且就连两个分辨率相同的手机有时也会出现这种问题。其实出现界面适配问题的原因,并不仅仅有分辨率,还有一个更重要的因素是:屏幕密度与DPI。屏幕密度与DPI这个概念紧密相连,屏幕密度是对每个像素点的缩放比例,DPI全拼是dots-per-inch,即每英寸显示的像素点数。
有种方式可以解决上述问题,即:smallestWidth适配或sw限定符适配。这种方式是指:Android会识别屏幕可用高度和宽度的最小尺寸的dp值(其实就是手机的宽度值或电视的高度值),然后根据此值自动匹配资源文件中对应限定符目录下的资源文件。

但首先要计算出待适配设备的最小宽度dp值,方法如下:
1.首先在任意的Activity中添加如下测试代码,以便得出所需的参数:(得出参数后,可以删除此测试代码)

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width = metric.widthPixels;//屏幕宽度(单位:px)
int height = metric.heightPixels;//屏幕高度(单位:px)
float density = metric.density;//屏幕密度(常见的有:1.5、2.0、3.0)
int densityDpi = metric.densityDpi;//屏幕DPI(常见的有:240、320、480)
Log.d(TAG, "width=" + width + ",height=" + height + ",density=" + density + ",densityDpi=" + densityDpi);


经测试3个不同的系统得出的结果如下:
width=1280,height=720,density=1.3312501,densityDpi=213
width=1920,height=1080,density=1.5,densityDpi=240
width=1920,height=1080,density=2.0,densityDpi=320

2.计算最小宽度dp值,方法如下:
用上述得出的width和height中的最小值,除以density就可以了。
上述3个系统的结果如下:
720/1.3312501 = 540;
1080/1.5 = 720;
1080/2.0 = 540;

注:从上述结果可知,第1个和第3个系统虽然分辨率和DPI都不同,但是最小宽度dp值是相同的,这就意味着这两个系统可以共用一套dimen值。

3.根据不同的最小宽度dp值,创建不同的values目录:
创建默认的values目录,创建dimens.xml文件,用来定义各种尺寸。通常是UI给的那一套dp换算标准。
依次创建values-sw540dp和values-sw720dp目录,创建dimens.xml文件,根据不同的dp换算标准修改所有的值。

注:如果之前已经创建了values-hdpi和values-xhdpi等方式的目录,一般可以直接转换成sw方式的目录,如果不能直接使用,请一定删除,否则系统可能会匹配到这些目录,还是会出现适配问题。
 

相关标签: Android相关