测量单位 px、dip、dp 和 sp 的区别是什么?


当前回答

我将详细介绍如何准确地将 dp 转换为 px:

如果在 mdpi 设备上运行,150 x 150 px 图像将占屏幕空间的 150 * 150 dp. 如果在 hdpi 设备上运行,150 x 150 px 图像将占屏幕空间的 100 * 100 dp. 如果在 xhdpi 设备上运行,150 x 150 px 图像将占屏幕空间的 75 * 75 dp.

相反的方式:说,你想添加一个图像到你的应用程序,你需要它填写一个100 * 100dp控制。

100 * 100 px 图像为 mdpi 150 * 150 px 图像为 hdpi 200 * 200 px 图像为 xhdpi

其他回答

SDP - 一个可扩展的尺寸单位 - 基本上它不是一个单位,而是不同屏幕大小的尺寸资源。

在 Intuit 中尝试 sdp 图书馆. 解决单位问题非常方便,您可以快速支持多个屏幕。

使用

android:paddingBottom="@dimen/_15sdp" for positive and android:layout_marginTop="@dimen/_minus10sdp" for negative sdp sdp

它在每个尺寸的值-sw<N>dp 文件夹(sw = 最小Width)中具有相当值。

注意

在大多数情况下,你仍然需要为平板电脑设计不同的布局。

例子

<LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="@dimen/_minus10sdp"
          android:paddingBottom="@dimen/_15sdp"
          android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="♡"
                    android:textColor="#ED6C27"
                    android:textSize="@dimen/_70sdp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="U"
                    android:textColor="@android:color/black"
                    android:textSize="@dimen/_70sdp" />
            </LinearLayout>

你可以用db为文本大小,但我更喜欢ssp为文本大小。

更多详细信息请参阅图书馆 GitHub 页面。

我只会使用DP。

有很多关于使用“sp”字体尺寸的谈话,虽然我欣赏这一点,我不认为这是从设计观点做正确的事情,你可以结束打破你的设计,如果用户有一些有趣的字体尺寸的选择,用户将最终责怪应用程序,而不是自己的生活选择。

此外,如果你在160dpi平板电脑上使用 sp-font 应用程序,你会发现一切都在扩展......但你的字体,这在比较中会看起来很小。

虽然“sp”字体的想法有一个好心,但这是一个糟糕的想法。

dpi -

每英寸点 测量屏幕的像素密度。

px - 像素

编写屏幕像素

点 - 点

约 1/72 英寸,与物理屏幕大小相比。

在 - 英寸 - 至物理屏幕大小(1 英寸 = 2.54 厘米)。

mm - 毫米 - 与物理屏幕大小有关。

sp - 尺寸独立的像素。

基于用户的字体大小偏好,字体应该是“sp”。

迪普 -

dip = dp 密度独立的像素. 它根据屏幕密度而异. 在 160 dpi 屏幕上, 1 dp = 1 像素. 使用 dp 除了文本字体大小。

在标准情况下,dp 和 sp 用于字体大小 sp 和 dp 用于其他任何东西。

单元转换的公式:

px = dp * (dpi / 160 );

Density Bucket -> Screen Display => Physical Size        => Pixel Size                   

ldpi         -> 120 dpi          => 0.5 x 0.5 in         => 0.5 in * 120 dpi = 60x60 px   

mdpi         -> 160 dpi          => 0.5 x 0.5 in         => 0.5 in * 160 dpi = 80x80 px   

hdpi         -> 240 dpi          => 0.5 x 0.5 in         => 0.5 in * 240 dpi = 120x120 px  

xhdpi        -> 320 dpi          => 0.5 x 0.5 in         => 0.5 in * 320 dpi = 160x160 px  

xxhdpi       -> 480 dpi          => 0.5 x 0.5 in         => 0.5 in * 480 dpi = 240x240 px 

xxxhdpi      -> 640 dpi          => 0.5 x 0.5 in         => 0.5 in * 640 dpi = 320x320 px  

下面是Android使用的公式:

px = dp * (dpi / 160)

在哪里 dpi 是下列屏幕密度之一. 所有可能的密度列表请参阅这里

它定义了“DENSITY_*”的恒例。

ldpi (低) ~120dpi mdpi (中) ~160dpi hdpi (高) ~240dpi xhdpi (超高) ~320dpi xxhdpi (超高) ~480dpi xxxhdpi (超高) ~640dpi

从这里拿出来。

这将解决很多混乱,当翻译在px和dp之间,如果你知道你的屏幕dpi。

所以,让我们说你想要一个图像60dp的HDPI屏幕,然后物理像素大小60dp是:

px = 60 * (240 / 160)

我已经计算了下面的公式,以便将 dpi 转换为 dp 和 sp