我们应该使用准确的 DPI 数字来实现多个屏幕尺寸吗?

Should we use the exactly DPI number to implement for multiple screen size?

我知道我们有一些 DPI 标准,我们可以使用它来支持多种屏幕尺寸:

ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi

但是当我计算一些真实的设备时,例如LG G3 - 它有 DPI 是 538。

所以我的问题是我们是否需要使用准确的 DPI 数字来缩放图像,...或者只是让它成为 xxhdpi 之一( 480dpi) 或 xxxhdpi (640dpi).

在我看来,我认为您不应该关心设备的信息 dpi。您应该只专注于为某些类型的屏幕提供图像、尺寸(dp、sp)等:

ldpi (low) ~120dpi

mdpi (medium) ~160dpi

hdpi (high) ~240dpi

xhdpi (extra-high) ~320dpi

xxhdpi (extra-extra-high) ~480dpi

xxxhdpi (extra-extra-extra-high) ~640dpi

============================================= ============================ 例子: 你可能知道 1 px = dp (dpi/160)

因此,如果您的图像尺寸为 32 x 32 像素,屏幕分辨率为 160 dpi。这意味着您的图像尺寸为 32 x 32 dp。

现在您想在 xxhdpi(超高)~480dpi 上缩放它。

在 xxhdpi(超高)~480dpi 上:1 px = dp(480/160) = 3dp

那你只需要再提供一张尺寸为32*3 x 32*3 px = 96 x 96 px的图片

您只需提供正确的资产,android 会处理其余的事情。您可以查看 documentation 了解更多详情。

Android 系统通过两种方式帮助您的应用程序实现密度独立性:

  1. 系统根据当前屏幕密度适当缩放 dp 单位
  2. 如有必要,系统会根据当前屏幕密度将可绘制资源缩放到合适的大小

因此,在您的情况下,最好同时提供这两种资产。在运行时,系统会根据当前设备屏幕的一般尺寸或密度为您的应用程序使用适当的资源。