dp与px的关系

px(像素),通俗地说就是屏幕中的点,它是最基本的显示单位。

这里模拟几个场景:

手机1、手机分辨率是480*800(mdip),尺寸为:宽3英寸、高5英寸

那么此时,1英寸=160px

手机2、手机分辨率是720*1200(hdip),尺寸为:宽3英寸、高5英寸

那么此时,1英寸=240px=160px*1.5

手机3、手机分辨率是960*1600(xhdip),尺寸为:宽3英寸、高5英寸

那么此时,1英寸=320px=160px*2

现在有一个layout.xml布局文件,布局中有一个TextView,设置其宽为160px。请问:在上面三台手机上显示出来的TextView实际的宽是多少?

答案显而易见,手机1:1英寸;手机2:2/3英寸;手机3:1/2英寸

总结:如果采用px作为界面上控件的宽高单位,那么不同分辨率下显示出来的实际大小也会不同。这样的用户体验相当不好。

我们希望的是即使在不同分辨率下,控件仍然能有其正常的宽高。

Android给我们提供了一个绝对的长度单位——dip。

dip——device independent pixel(设备独立像素)。Android规定,无论在何种分辨率下,160dip=1英寸。

因此,给TextView设置宽为160dp,在上面三台手机上显示的效果为:

手机1:1英寸; (1dp=1px)
手机2:1.5英寸; (1dp=1.5px)
手机3:2英寸 (1dp=2px)

此外,我们可以在虚拟机上的顶部栏看到240dpi。dpi——dots per inch(意思是每英寸有多少像素)。由上面的三个场景可以知道这台手机(虚拟机)是hdip(高分辨率)。

如果我们想在java代码中设置控件的宽高,那么这时我们需要动态获取当前手机dp和px的比值

float scale = getResources.getDisplayMetrics.density;

然后用比值乘以160,就得到我们要设置的宽高。

int height = (int)(scale * 160 + 0.5);
int width = (int)(scale * 160 + 0.5);
LinearLayout.LayoutParams  params = LinearLayout.LayoutParams(width,height);
textView.setLayoutParams(params);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值