一、基本概念
- dp:安卓中的相对大小
- dpi:( dot per inch )每英寸像素多少
- px:像素点
二、详细说明
px和dpi
px
平常所说的 1920×1080 只是像素数量,也就是 1920px×1080px, 代表手机高度上有 1920 个像素点,宽度上有 1080 个像素点。
dpi
要想判别手机屏幕的显示好坏,还要考虑屏幕的宽高(英寸),也就是用 dpi 即每英寸多少像素来评价屏幕的显示效果。(不然假如手机分辨率是 1920×1080, 但是屏幕是几十寸的,那显示效果将不会很好,甚至你有可能看到小的像素块,那将更影响视觉效果。)
dp
怎样理解 dp 才好呢 ?
- 其实 dp 就是为了使得开发者设置的长度能够根据不同屏幕( 分辨率/尺寸也就是 dpi )获得不同的像素 ( px ) 数量。比如:我将一个控件设置长度为 1dp, 那么在 160dpi 上该控件长度为 1px, 在 240dpi 的屏幕上该控件的长度为 1 * 240 / 160 = 1.5 个像素点。
- 也就是dp会随着不同屏幕而改变控件长度的像素数量。
- 关于dp的官方叙述为当屏幕每英寸有 160个 像素时( 也就是 160dpi ),dp与px等价的。那如果每英寸 240 个像素呢?1dp —>1*240/160=1.5px,即 1dp 与 1.5px 等价了。
- 其实记住一点,dp 最终都要化为像素数量来衡量大小的,因为只有像素数量最直观。
计算dp的方法:
- 通常来说,我们写程序时几乎没用到计算dp,就是直接凭着自己的感觉写的。此处计算dp只是为了大家更好理解dp,如果有的人想精确设置控件大小,也可以这样计算的。
- 我直接画张图吧:
- 计算dp往往是由程序员完成的,是创造的过程,顺叙的过程。但是写程序总会有两个历程的,一个是进行写,一个是返回读,这个读的话就用到了将 dp 转换了。
dp转px—(最常用的方法):
- 前面已经看到一个例子了如下(注:等号都是等价,是理解上的等于,不是直接的等于的):安卓中如果手机每英寸有 160px,即手机是 160dpi,那么此时1dp就可以理解为1px,假如现在手机是240dpi,那么1dp=240/160 px=1.5px,
从上可以看出dp转px只与屏幕的dpi有关。 - 对于 Android 来说,最终我们能读懂或者衡量的都是px,所以最后我们都将dp化为px好理解一点。我总结了dp转px的公式如下:
- 公式:dp值×(当前dpi/160dpi)=>得出当前的像素数目
手机屏幕dp最大值是多少?
- 那么问题来了,一个手机屏幕最大有多大的dp呢,我能不能设置成 100000dp 呢?其实这也是我所思考的,下面我慢慢来讲。
- 假如现在将控件宽度设置为 160dp, 那不同 dpi 的手机所得到的像素是多少呢?
从中可以看出最后所得像素值与dpi值相同,也就是说不管什么屏幕160dp,就相当于1英寸。 - 所以要得到全屏最长的的dp,就等于160*宽(或者高英寸长)
如第三个 1080*1920例子,160*3 = 480dp,所以 0-480dp 就是宽的 dp 范围。因为480*360/160=1080 个像素,正好等于宽的最大像素数量。