【问题标题】:Android - How does dp occupy different space in devices with different sizes?Android - dp 如何在不同尺寸的设备中占用不同的空间?
【发布时间】:2021-01-20 01:08:30
【问题描述】:

我搜索了很多关于 dp、px、inch、pt 等的内容。

根据我对“dp”的理解:

指定“dp”只是一种让 Android 为具有不同屏幕密度的设备绘制相同大小的视图的方法。例如,对于中等密度设备,每个“dp”将占据一个像素。对于具有较小像素以适应每英寸更多像素的高密度设备,“dp”将占用超过一个像素。对于低密度设备 - 它具有更大的像素以适应每英寸更少的像素,'dp' 将占用不到一个像素。

但我还读到的是,“dp”占用的空间根据屏幕尺寸而有所不同,即对于小屏幕,“dp”将占用更少的空间,而对于较大的屏幕,“dp”将占用更大的空间. 这究竟是如何发生的?根据我对“dp”的了解,它应该在具有不同屏幕尺寸的设备中占据相同数量的空间。例如,240 dpi 的大屏幕将有一个“dp”占用 1.5 个像素,对于 240 dpi 的小屏幕也是如此。那么 'dp' 怎么会在不同的屏幕尺寸下占用不同的空间呢?

我对“dp”的理解缺少什么?请帮忙。

【问题讨论】:

    标签: android pixel dpi screen-size screen-density


    【解决方案1】:

    Android 定义了 160 的基线 dpi,用作计算所有屏幕密度的尺寸的参考

    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 作为基线参考。

    【讨论】:

    • 我了解屏幕密度和dp之间的关系,但似乎不了解屏幕物理尺寸和dp之间的关系。请详细说明。
    • 与屏幕大小无关..不要混淆..
    • 显示大小与“dp单位”无关。显示尺寸就是显示画布的大小。要了解您需要关注的所有内容,屏幕 DPI 定义了 1 平方英寸中有多少个点,并且“dp 单位”是一个抽象单位,根据设备的 DPI 进行缩放(向上或向下) ) 以在任何屏幕尺寸上提供“统一尺寸”,使用 160 作为基线参考。
    【解决方案2】:

    在 Android 操作系统上,与设备无关的像素相当于 160 dpi 屏幕上的一个物理像素。通过这个定义,你可以理解dp与屏幕尺寸没有关系,因为比例已经固定为160 dpi。

    .

    【讨论】:

    • 你的意思是'dp'无论是小设备还是大设备都占据相同的大小,如果它们的屏幕密度相同?
    • 是的,即使屏幕密度或尺寸不同或相同,dp 在任何地方都是相同的,因为它是与密度无关的像素。实际像素由android根据实际屏幕密度计算得出。开发人员会在不同的屏幕上更改 dp 大小,因为在较大的设备上,您可能想要更多的边距、填充和较小的边距,在较小的设备上进行填充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 2016-12-29
    • 2013-07-19
    相关资源
    最近更新 更多