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

本文介绍了Android设备中的屏幕分辨率、像素密度(dpi)以及它们与dp的关系。通过adb命令和代码示例展示了如何获取这些参数,并提到了不同设备如何根据像素密度加载相应资源。同时,讨论了屏幕的可用分辨率与实际分辨率的获取方法。
摘要由CSDN通过智能技术生成

一、先搞清楚几个概念:

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

 

 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值