一文搞清楚安卓屏幕密度、像素密度、分辨率、安卓计量单位(dp)

一、先搞清楚几个概念:

1、屏幕分辨率(px):

分辨率是手机屏幕的像素点总数,一般用屏幕宽的像素点数乘以屏幕高的像素点数。分辨率越大屏幕越细腻,能够显示的细节就越多。

常用的分辨率有320x240、640x480、1280x720、1280x960、1080x1920、2560x1440等,单位是像素。比如1080x1920表示屏幕宽度方向上有1080个像素,屏幕高方向上有1920个像素

2、像素密度(dpi):

指每英寸的屏幕中包含的像素数量

3、屏幕密度:

是像素密度的另一种表示形式,android以像素密度160dpi为基准对屏幕进行划分,当像素密度为160dpi时屏幕密度为1.0,像素密度为120dpi时屏幕密度为0.75,像素密度为320dpi时屏幕密度为2.0,及即: 屏幕密度 = 像素密度/160

4、安卓的计量单位dp,,主要是是用来标注控件的宽、高。其换算公式:

 屏幕的总dp值 = 分辨率/屏幕密度

5、屏幕对角线的长度值,以英寸为单位。

二、adb命令获取方式:

像素密度(dpi):adb  shell wm density

屏幕分辨率(px):adb shell wm size

三、代码获取方式:

1、屏幕密度、像素密度:

DisplayMetrics dm = new DisplayMetrics();

dm = getResources().getDisplayMetrics();

float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)

int densityDPI = dm.densityDpi; // 像素密度(每寸像素:120/160/240/320)

2、分辨率:

通常,获取到的屏幕分辨率有两种需求,一种是屏幕的实际分辨率,另一种是受顶部或底部的虚拟导航栏占用产生的应用实际可用分辨率(相比实际分辨率减小了占用部分)。接下来代码示例下两种需求的获取方法:

一、获取屏幕实际分辨率

方法一:

WindowManager windowManager = getWindow().getWindowManager();

Point point = new Point();

windowManager.getDefaultDisplay().getRealSize(point);

//屏幕实际宽度(像素个数)

int width = point.x;

//屏幕实际高度(像素个数)

int height = point.y;

方法二:

WindowManager windowManager = getWindow().getWindowManager();

DisplayMetrics metrics = new DisplayMetrics();

windowManager.getDefaultDisplay().getRealMetrics(metrics);

//屏幕实际宽度(像素个数)

int width = metrics.widthPixels;

//屏幕实际高度(像素个数)

int height = metrics.heightPixels;

二、获取屏幕可用分辨率

方法一:

WindowManager windowManager = getWindow().getWindowManager();

Display display = windowManager.getDefaultDisplay();

Point point = new Point();

display.getSize(point);

//屏幕可用宽度(像素个数)

int width = point.x;

//屏幕可用高度(像素个数)

int height = point.y;
  1. WindowManager windowManager = getWindow().getWindowManager();

  2. Display display = windowManager.getDefaultDisplay();

  3. Point point = new Point();

  4. display.getSize(point);

  5. //屏幕可用宽度(像素个数)

  6. int width = point.x;

  7. //屏幕可用高度(像素个数)

  8. int height = point.y;

方法二:

WindowManager windowManager = getWindow().getWindowManager();

Display display = windowManager.getDefaultDisplay();

//屏幕可用宽度(像素个数)

int width = display.getWidth();

//屏幕可用高度(像素个数)

int height = display.getHeight();

3、安卓会根据不同设备的像素密度值,加载对应的资源文件,不同像素密度对应的drawable文件夹如下所示:

a704face957b48fd9c22da263a9d49b5.png

 4、以mdpi为基线,各密度目录下的放大倍数(即缩放因子density)如下:

eb9ab3b97bbd4ab5bd460896e0c5977c.png

猜你喜欢

转载自blog.csdn.net/ahui_123456789/article/details/128639472