Android多个屏幕尺寸具有相同的密度

标签 android

我对密度感到困惑。我看到在中等密度下,屏幕分辨率可以是 320x480、480x800 或 480x854。因此,如果我在 mdpi 文件夹中有一个 300 像素宽的图像,它如何在所有 3 种不同的屏幕尺寸(主要是 320x480 与其他 2 种)上看起来都一样? 通过看起来相同的尺寸,我的意思是根据屏幕尺寸放大或缩小。谢谢。

最佳答案

这里需要理解三个不同但相互关联的概念:屏幕密度(每英寸/厘米的像素数,或通常称为打印机中每英寸点数的 DPI)、物理屏幕尺寸(以英寸或厘米为单位)和像素数 (也称为分辨率,以像素为单位)。

这些术语不可互换,您需要了解它们如何相互关联,以免与问题混淆。通常,您可以忽略物理屏幕尺寸,因为这已经计入了密度。例如,一个 3 英寸宽和 300 像素宽的屏幕将具有 100 的 DPI。此外,手机屏幕往往具有大致相同的物理尺寸,即使像素数量非常不同。

因此,让我们考虑分辨率为 480x320 且密度约为 160dpi 的 G1 或 Hero 的屏幕。一个 300 像素宽的图像将是 1.875 英寸宽。这是通过像素大小 (300)/密度 (160) 计算的。现在,如果将其与 Nexus One、Droid 或类似设备的屏幕进行比较,这些型号的屏幕分辨率更高,约为 800x480,高密度约为 240dpi。如果您显示相同的 300 像素宽的图像,它现在只会以大约一又四分之一英寸的宽度显示。换句话说,它会小得多。这可能是个问题,因为如果图像包含文本,则文本可能不再可读。

可以告诉 Android 自动缩放图像以适应这些不同的屏幕,使其看起来仍然是相同的大小。这是通过在与密度无关的像素中设置大小来完成的。如果某物是 100dp 宽,那么它在中等密度屏幕上将是 100px 宽。在高密度屏幕上,它将是 150 像素宽,但它们在实际屏幕上看起来都差不多。但是,如果这样做,您的图像可能会有点模糊。就像在图片查看程序中将照片放大得太近一样;边缘会变得模糊,因为它会在您缩放时“拉伸(stretch)”它们。

解决这个问题的方法是使用 mdpi、hdpi 等文件夹。你给 Android 一个已经缩放的图像,所以它不必自己做。显然,如果您只是在 Photoshop 中自己拉伸(stretch)图像,那么它看起来不会更好。但通常会调整非常大的图像的大小以使其适合移动屏幕。在这种情况下,您只需将它们的大小调整 3 次,每次调整为不同的分辨率。

因此,最后回答您的具体问题:如果您的 mdpi 文件夹中放置了一张图像,则无论屏幕分辨率如何,只要它们的密度相同,它的大小都将完全相同。将改变的是它们周围有多少空间,例如一个 320x320px 宽的图像将填满 320x480 屏幕的大部分,但仅占 480x800 屏幕的大约三分之一。但是,如上所述,通常更高分辨率的手机也有更密集的屏幕。在这种情况下,Android 不会在您的 mdpi 文件夹中查找图像 - 它会转到 hdpi 文件夹,如果在那里找不到它,它将采用默认的“drawable”文件夹。然后,如果您使用过 DP,它会自动缩放,或者如果您使用过 PX,它会保持原样,只是看起来更小。

那里!给你一个很长的答案。我希望这是有道理的。

关于Android多个屏幕尺寸具有相同的密度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2638202/

相关文章:

android - 在android中绘制自定义形状

java - 空指针异常。无法创建 Activity

android - 动画不工作

android - 如何在 showModalBottomSheet 中创建内部导航?

android - StateFlow.value 不应在组合内调用

android - 房间 (AAC) : [SQLITE_ERROR] SQL error or missing database (near "group": syntax error)

android - Road API for android native

android - 我是否需要添加不同大小的相同可绘制对象,即使它们每个都有多个 DPI 版本?

android - android 项目的 local.properties 去哪儿了?

java - 如何使用 Canvas 进行缩放