Android-dp如何在尺寸不同的设备中占用不同的空间?

问题描述

搜索了很多有关dp,px,inch,pt等的信息。

据我对'dp'的了解:

指定'dp'只是使Android在具有不同屏幕密度的设备上以相同大小绘制视图的一种方式。例如,对于中等密度的设备,每个“ dp”将占据一个像素。对于高密度设备-具有较小的像素以适合每英寸更多的像素,“ dp”将占据更多的像素。对于低密度设备-像素较大,每英寸可容纳更少的像素,则'dp'所占的空间将小于一个像素。

但是我还读到的是,“ dp”所占据的空间根据屏幕尺寸而变化,即,对于小屏幕,“ dp”将占据较少的空间,而对于大屏幕,“ dp”将占据较大的空间。 。 这到底是怎么发生的?据我对“ dp”的了解,它在屏幕尺寸不同的设备中应占据相同的空间。例如,240 dpi的大屏幕的“ dp”占1.5个像素,对于240 dpi的小屏幕也是如此。那么,“ dp”对于不同的屏幕尺寸会占用不同的空间量吗?

我对'dp'的理解中缺少什么?请帮忙。

解决方法

在Android操作系统上,与设备无关的像素等效于160 dpi屏幕上的一个物理像素。通过此定义,您可以理解p与屏幕尺寸无关,因为比例已经固定为160 dpi。

,

Android定义的基准dpi为 160 ,用作参考来计算所有屏幕密度的尺寸:

pixel_size * (device_dpi / baseline_dpi) = result in "dp" units

>> or the other way around 

dp_size / (device_dpi / baseline_dpi) = result in "pixel" units

因此,在240dpi的设备中1个像素等于1.5dp单位:

1 * (240 / 160) = 1.5

反之,在240dpi的设备中,1.5dp的单位等于1像素

1.5 / (240 / 160) = 1

要知道的重要事实是, 160 是用作所有DPI的参考的基准。 因此,随着dp单位的增加/减少,绘制所需的像素区域将转化为保持相同的尺寸比例,而与设备屏幕无关。

official documentation中的更多信息。

要更加清楚:

显示尺寸与“ dp单位”无关。显示尺寸就是显示画布的大小。屏幕DPI定义1平方英寸中可以容纳多少个点。 “ dp单位”是一种抽象单位,它可以根据设备的DPI进行缩放(放大或缩小),以使用160作为基线参考来在任何屏幕尺寸上给出“统一尺寸”。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...