屏幕尺寸,屏幕分辨率,屏幕密度,各种长宽单位(px,sp,dp,in.pt,mm)

1.屏幕单位

名称

单位缩写

单位全拼

介绍

屏幕尺寸 '' 或 in inch 屏幕的大小,通常用屏幕对角线的长度表示.单位是寸
屏幕分辨率 px pixels

整个屏幕的像素数,一般用屏幕的像素宽度(水平像素数)乘以像素高度表示,形如1280x720,

反之分辨率为1280x720的屏幕,像素宽度不一定为1280

屏幕密度或像素密度

dpi

dots per inch

每英寸中的像素数。计算公式:屏幕分辨率/屏幕尺寸,

打印分辨率

dpi

dots per inch

dpi 原是印刷上的记量单位,意指每平方英寸上,所印刷的网点数。

在android中是每英寸中的像素点数,计算公式: (√(横向分辨率^2+纵向分辨率^2))/屏幕尺寸)

图像的采样率

ppi

pixels per inch

ppi才是是图像分辨率的单位,在图像中,每英寸所包含的像素数。

数码相机拍出来的图片因品牌或生产时间不同可能有所不同,常见的有72ppi,180ppi和300ppi

2.长度单位

名称 单位缩写 单位全拼 介绍
像素 px pixels

“像素”(Pixel) 是由 Picture(图像) 和 Element(元素)这两个单词的字母所组成的,

是用来计算数码影像的一种单位,若把影像放大数倍,会发现这些连续色调其实是由

许多色彩相近的小方点所组成,这些小方点就是构成影像的最小单位“像素”(Pixel)。

缩写 px。

比例像素 sp scaled pixels 带比例的像素,android中主要用它处理字体的大小,设置字体大小的最佳单位。
与设备无关像素 dip/dp

device independent pixels

长度单位,根据具体平台屏幕密度的不同最终转换为相应的像素长度,具体转换规则是:

标准密度为160dpi,1dp长度在密度为160dpi的平台表示一个像素的长度,而在240dpi

的平台则表示1.5个像素的长度这个和设备硬件有关,

一般为了支持WCGA、HVGA和QVGA推荐使用这个,不依赖于像素。等同于dp

英寸 in inches 通常用屏幕对角线的长度
点数 pt points 一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用
毫米 mm millimeters  

3.取得常用屏幕参数的方法 

3.1 取屏幕参数

 1     public MySystemParams(Activity activity) {
 2         DisplayMetrics dm = new DisplayMetrics();
 3         activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
 4         screenWidth = dm.widthPixels;
 5         screenHeight = dm.heightPixels;
 6         densityDpi = dm.densityDpi;
 7         scale = dm.density;
 8         fontScale = dm.scaledDensity;
 9 
10         screenOrientation = screenHeight > screenWidth ? SCREEN_ORIENTATION_VERTICAL
11                 : SCREEN_ORIENTATION_HORIZONTAL;
12     }

3.2 取dpi代码

1      val density = resources.displayMetrics.density
2      val dpi = density * 160
3      Log.e("MainActivity","density = $density, dpi = $dpi")

 

4. android ldpi、mdpi、hdpi、xxhdpi表

 官网:

  https://developer.android.com/training/multiscreen/screendensities#TaskProvideAltBmp

 

ldpi 低密度 (ldpi) 屏幕 (~ 120dpi) 
mdpi 中密度 (mdpi) 屏幕 (~ 160dpi) (这是基准密度)
hdpi 高密度 (hdpi) 屏幕 (~ 240dpi) 
xhdpi 加高 (xhdpi) 密度屏幕 (~ 320dpi) 
xxhdpi 超超高密度 (xxhdpi) 屏幕 (~ 480dpi) 
xxxhdpi 超超超高密度 (xxxhdpi) 屏幕 (~ 640dpi) 
nodpi 与密度无关的资源。无论当前屏幕的密度是多少,系统都不会缩放以此限定符标记的资源。
tvdpi 介于 mdpi 和 hdpi 之间的屏幕(约 213dpi)

 

如果有一个可绘制位图资源,它在中密度屏幕上的大小为 48x48 像素,那么它在其他各种密度的屏幕上的大小应该为:应遵循六种主要密度之间的 3:4:6:8:12:16 缩放比。

  • 36x36 (0.75x) - 低密度 (ldpi)
  • 48x48(1.0x 基准)- 中密度 (mdpi)
  • 72x72 (1.5x) - 高密度 (hdpi)
  • 96x96 (2.0x) - 超高密度 (xhdpi)
  • 144x144 (3.0x) - 超超高密度 (xxhdpi)
  • 192x192 (4.0x) - 超超超高密度 (xxxhdpi)

 

 

5.px,dp,sp单位转换公式

5.1 常用计算公式

  dpi = 屏幕分辨率/屏幕尺寸(英寸)

  px = dp * (dpi / 160)

5.2 DisplayMetrics.density

  DisplayMetrics.density 是当前屏幕密度相当于标准密度的缩放系数。即:DisplayMetrics.density = 屏幕dpi / 160

  在中密度屏幕上,DisplayMetrics.density 等于 1.0;

  在高密度屏幕上,它等于 1.5;

  在超高密度屏幕上,等于 2.0;在低密度屏幕上,等于 0.75。

  此数字是一个系数,用其乘以 dp 单位,即可得出当前屏幕的实际像素数。

5.3 打印屏幕信息代码

 1     fun printScreen(){
 2 
 3         //过期方法
 4         run {
 5             val display = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
 6                 baseContext.display
 7             } else {
 8                 getWindowManager().getDefaultDisplay()
 9             }
10             val  metrics = DisplayMetrics()
11             display?.getMetrics(metrics)
12 
13             val width = metrics.widthPixels
14             val height = metrics.heightPixels
15 
16             val density = metrics.density
17             val scaleDensity = metrics.scaledDensity
18 
19             val dpi = metrics.densityDpi
20             val ydpi = metrics.ydpi
21             val xdpi = metrics.xdpi
22 
23             Log.e("screen","width = $width,height = $height,"
24                     + " density = $density,scaledDensity = $scaleDensity "
25                     + " dpi = $dpi,xdpi = $xdpi,ydpi = $ydpi")
26         }
27 
28         //新方法
29         val metrics = resources.displayMetrics
30 
31         val width = metrics.widthPixels
32         val height = metrics.heightPixels
33 
34         val density = metrics.density
35         val scaleDensity = metrics.scaledDensity
36 
37         val dpi = metrics.densityDpi
38         val ydpi = metrics.ydpi
39         val xdpi = metrics.xdpi
40 
41         Log.e("screen","width = $width,height = $height,"
42                 + " density = $density,scaledDensity = $scaleDensity "
43                 + " dpi = $dpi,xdpi = $xdpi,ydpi = $ydpi")
44     }

结果:

1 width = 1080,height = 2264, density = 3.0,scaledDensity = 3.0  dpi = 480,xdpi = 397.565,ydpi = 401.594
2 width = 1080,height = 2264, density = 3.0,scaledDensity = 3.0  dpi = 480,xdpi = 397.565,ydpi = 401.594

 

posted @ 2015-10-04 23:41  f9q  阅读(1695)  评论(0编辑  收藏  举报