Android中度量单位的使用和关系

1. 概念理解

像素(px/pixel):屏幕上的点,是数码设备最小的独立显示单位,例如分辨率1920*1080就是像素点个数。Android开发中不建议直接使用px,而是建议使用dp代替px来完成视图尺寸的定义。

分辨率(Resolution):指屏幕纵向和横向像素个数,例如1920*1080,表示纵向有1920个像素点*横向1080个像素点。

英寸(in/inch):用于表达手机对角线的物理尺寸,1in(英寸) =2.54cm(厘米)。

dpi(Dots Per Inch):每英寸像素点数量,可以反映屏幕的清晰度, dpi=纵向像素平方+横向像素平方之和开根(初中勾股定理,求直角三角形斜边)再除以英寸值,例如1920*1080分辨率5英寸的手机上,即√(1920^2 + 1080^2) / 5 约等于441。

密度(density):指的是屏幕里像素值浓度,density = dpi/160。160dpi是Android假定的基准密度,换句话说,就是160dpi就是密度为1。

dip(device independent pixels/与密度无关的像素/dp):在屏幕密度为1也就是dpi=160的屏幕,1dp = 1px。Android开发中在布局中指定视图尺寸时,推荐将dp作为度量单位,dp = px / 密度。

sp(scale-independent pixel/与比例无关的像素):与dp类似,用于指定字体大小,和dp不同的是它可以自动根据用户的字体大小偏好来缩放。

pt(磅):1磅等于1/72英寸。

2. Adnroid对手机屏幕尺寸和dpi分级情况

密度等级

dpi范围

密度值/dp和px比例

通常的分辨率(通常但不一定,还要结合英寸)

低密度(ldpi)

0~120dpi

0.75 / 1dp=0.75px

320*240

中密度(mdpi)

120~160dpi

1

480*320

高密度(hdpi)

160~240dpi

1.5

800*480

超高密度(xhdpi)

240~320dpi

2

1280*720

extra high(xxhdpi)

320~480dpi

3

1920*1080

extra extra high (xxxhdpi)

480~640dpi

4

2560 * 1440(2K分辨率)

extra extra extra high(xxxxhdpi)

640~960dpi

6

3840 * 2160(4K分辨率)(4K电影其影片分辨率4096×2160,而电视、手机领域,由于过去屏幕16:9为主流比例,因此4K指的是3840×2160的物理分辨率)

3. dp转换px

实际px = dp * (dpi / 160 ),其中dpi可以是120、160、240、320,等。因此,当一个100dp的Button显示在一个315dpi的屏幕上时,其实际宽度是100 * ( 320 / 160 ) = 200px。为了证明,你可以在XML布局中定义100dp的Button,而在代码中获取Button对象使用对象的getWidth()方法获得其以像素数为单位的宽度看看是否为200px。

在实际开发中,若需要进行dp和px的转义,可以使用以下代码:

public static int dp2px(Context context, float dp) {

    // +0.5f是为了四舍五入

    return (int) (TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()) + 0.5f);

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值