android中使用DisplayMetrics获取屏幕参数

--关于Density

int android.graphics.Bitmap.getDensity(),返回bitmap-density(密度)。默认的density就是当前display-density,除非当前应用程序不支持不同的screen-density。

在android.util.DisplayMetrics类中定义了一些变量和常量。

--常量DENSITY_XXX,

int类型,定义了不同级别的密度对应的dpi数值,

低密度,DENSITY_LOW,120,

中密度,DENSITY_MEDIUM,160,

高密度,DENSITY_HIGH,240,

超高密度,DENSITY_XHIGH,320,

默认密度,DENSITY_DEFAULT,160(即中密度)。

--变量widthPixels和heightPixels,

int类型,单位像素,display的absolute-width和absolute-height。

--变量density,

float类型,display的logic-density。是一个scaling-factor,用在Density-Independent-Pixel单位,一个dip就是一个像素。

160dpi的screen提供系统display的baseline。

因此,160dpi的screen-density值为1(160/160),120dpi的screen-density值为0.75(120/160)。

screen-1,已知240x320,1.5"x2" ,可以计算出densityDpi等于160。即240/1.5=160,或320/2=160。再通过densityDpi/160计算出density的值1.0。

screen-2,已知320x480,1.5"x2",可以计算出densityDpi等于240。即320/1.5=240,或480/2=240。再通过densityDpi/160计算出density的值1.5。

--变量densityDpi,

int类型,dots-per-inch。

--关于分辨率和尺寸

分辨率是手机长和宽方向上的像素个数,

尺寸是指屏幕的实际物理大小,

手机尺寸手机尺寸115.5×61×12.45解析得长115.5毫米,宽61毫米,高12.45毫米。

1英寸(inch)等于2.54厘米,

--获取DisplayMetrics对象,再获取屏幕的参数

DisplayMetrics displaysMetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaysMetrics);

--关于scaledDensity

float类型,一个scaling-factor,用于fonts显示,同density相同的值,除非由于基于font-size上的体验需要做微调。

--TyuMainApp.getApp().getResources().getDisplayMetrics()对象中的属性值

--本机上调试时记录的数据

DENSITY_DEFAULT    160    
DENSITY_DEVICE    240    
DENSITY_HIGH    240    
DENSITY_LOW    120    
DENSITY_MEDIUM    160    
DENSITY_TV    213    
DENSITY_XHIGH    320    
density: 1.5, sclaedDensity: 1.5 
densityDpi: 240    
heightPixels: 800, widthPixels: 480

xdpi: 160.42105, ydpi: 160

原文地址:https://www.cnblogs.com/zhujiabin/p/5225050.html