鸟语天空
度量单位
post by:追风剑情 2015-7-7 21:50

当指定Android用户界面上元素的大小时,应知道以下度量单位:

dp——与密度无关的像素(density-independent pixel)。1dp相当于160dpi的屏幕上的1像素。当在布局中指定视图尺寸时,推荐将dp作为度量单位。160dpi是Android假定的基准密度。当指的是与密度无关的像素时,可以使用dp或dip。

sp——与比例无关的像素(scale-independent pixel)。与dp类似,推荐用于指定字体大小。

pt——磅。1磅等于1/72英寸(基于屏幕的物理尺寸)。

px——像素。对应于屏幕上的实际像素。不建议使用这一单位,因为您的用户界面在不同屏幕尺寸的设备上可能不能正确呈现。


Android定义并可识别4种屏幕密度:

低密度(ldpi)——120dpi

中等密度(mdpi)——160dpi

高密度(hdpi)——240dpi

超高密度(xhdpi) ——320dpi


例如:

Nexus S的屏幕,它有一个4英寸的屏幕(按对角线计算),屏幕宽度为2.04英寸。它的分辨率为480(宽度)x800(高度)像素。将480像素分布到2.04英寸的宽度上,结果就是像素密度大约为235dpi。


使用dp单位确保了无论屏幕密度如何,视图总是会以正确的比例显示,这是因为Android会根据屏幕的密度自动缩放视图的尺寸。以Button为例。如果它在一个180dpi的屏幕上显示(180dpi的屏幕会被当做160dpi的屏幕进行处理),则宽度将是160像素。但是,如果在一个235dpi的屏幕上显示(235dpi的屏幕会被当做240dpi的屏幕处理),那么宽度将是240像素。


如何将dp转换为px?

将dp转换为px(像素)的公式如下:

实际像素=dp*(dpi/160),其中dpi可以是120、160、240或320。

因此,当Button显示在一个235dpi屏幕上时,其实际宽度是160*(240/160)=240px。当运行在180dpi的模拟器中(被视为160dpi的设备)时,其实际像素则是160*(160/160)=160px。

为了证明这是正确的,可以使用View对象的getWidth()方法获得其以像素表示的宽度:

public void onClick(View view)
{
    Toast.makeText(this, String.valueOf(view.getWidth())), Toast.LENGTH_LONG).show();
}

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容