android之屏幕适配及其相关参数详解

首先贴一张官网的图:


DisplayMetrics metrice= new DisplayMetrics();
Display defaultDisplay = getWindowManager().getDefaultDisplay();
defaultDisplay.getMetrics(metrice);

int densityDpi = metrice.densityDpi;
float density = metrice.density;
int heightPixels = metrice.heightPixels;
int widthPixels = metrice.widthPixels;
float xdpi = metrice.xdpi;
float ydpi = metrice.ydpi;
float scaledDensity = metrice.scaledDensity;

dip:于设备无关的像素值,比如说我在中密度上显示的值为50dip,在低密度的设备上显示的值就为50*0.75=37.5

px:代表物理像素,比如说在中密度上显示的值为50px,注意单位是px,在其他密度设备上显示的值也是50px

densityDpi :每英寸多少个点,我的理解是每英寸多少个dip

density:densityDpi /160;


drawable-hdpi 高密度,通常是指240也就是上述代码中的densityDpi为240

drawable-ldpi 底密度,通常是指120
drawable-mdpi 中等密度,通常是指160

drawable-xhdpi 超高密度,通常是指320

drawable-mdpi 里放了一张像素为48*48的图片,把该图片设置成button按钮的背景,在不同密度,不同分辨率的设备下获得的数据如下:

 densityDpi=120
 density=0.75
 heightPixels=320
 widthPixels=240
 xdpi=120.0
 ydpi=120.0
 scaledDensity=0.75
 intrinsicHeight=36
 intrinsicWidth=36

 densityDpi=160
 density=1.0
 heightPixels=480
 widthPixels=320
 xdpi=160.0
 ydpi=160.0
 scaledDensity=1.0
 intrinsicHeight=48
 intrinsicWidth=48

 densityDpi=160
 density=1.0
 heightPixels=768
 widthPixels=1024
 xdpi=160.0
 ydpi=160.0
 scaledDensity=1.0
 intrinsicHeight=48
 intrinsicWidth=48

 densityDpi=240
 density=1.5
 heightPixels=800
 widthPixels=480
 xdpi=240.0
 ydpi=240.0
 scaledDensity=1.5
 intrinsicHeight=72
 intrinsicWidth=72

 densityDpi=240
 density=1.5
 heightPixels=800
 widthPixels=480
 xdpi=160.42105
 ydpi=160.0
scaledDensity=1.5
 dimension=75.0
 intrinsicHeight=72
intrinsicWidth=72

 densityDpi=320
 density=2.0
 heightPixels=640
 widthPixels=960
 xdpi=320.0
 ydpi=320.0
 scaledDensity=2.0
 intrinsicHeight=96 //代表图片实际显示的物理像素
 intrinsicWidth=96
由此可知,图片的显示和密度之间存在着莫大的关系,在同等密度下不管设别分辨率多大,图片所显示的大小是一样的,在密度不相同的情况下,图片会进行缩放:例如,在中等密度下图片显示高度为48px,低密度下显示的高度为48*0.75=36,图片会进行缩小;在高密度下显示的高度为48*1.5=72,图片会放大;
由此也可以得出官网中的计算公式:  px = dp * (dpi / 160) 即px =dp*density;(density=densityDpi/160)




  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wqunwang506

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值