【问题标题】:Android different screen size and different densities [duplicate]Android不同的屏幕尺寸和不同的密度[重复]
【发布时间】:2013-12-04 09:11:25
【问题描述】:

我必须在我的 Android 应用中管理不同的屏幕尺寸和不同的密度。 我没有正确获取目录结构。

目前我的理解是有四种屏幕尺寸:

  1. 正常
  2. 超大

还有不同的密度:

  1. ldpi
  2. mdpi
  3. hdpi
  4. xhdpi

现在每个设备尺寸(small、normal、large 和 xlarge)都应映射到每个密度。因为每个尺寸都可以有不同的密度,对吧? 如果是,那么我们可以说小屏幕具有所有密度,即(ldpi、mdpi、hdpi、xhdpi) normal、large 和 xlarge 相同。

关键是我将如何在我的可绘制目录中管理它们。 会不会有四个不同尺寸的小屏幕文件夹(drawable-small-ldpi、drawable-small-mdpi、drawable-small-hdpi、drawable-small-xhdpi)?

对于其他屏幕尺寸也是如此。

如果不是,那么我将如何管理(drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi)文件夹中的所有图像,因为不同的屏幕尺寸我将拥有不同尺寸的图像。那么不同密度的小设备和大小不同的大设备如何在相同密度的文件夹中进行管理。

在我阅读所有这些内容时,请不要给我任何 Android 文档的参考。

如果有人不明白我的意思,请告诉我。我很困惑。

【问题讨论】:

标签: android android-screen-support


【解决方案1】:

当我开始在 Android 中进行开发时,我对同样的问题感到困惑。但现在我已经弄清楚了,我做得很好。

无论如何,You are absolutely right.you 可以为每个文件夹提供 4 个不同的图像。i.e.: drawable-small-ldpi, drawable-small-mdpi, drawable-small-hdpi, drawable-small-xhdpi

But it is just waste of your time.因为您不必为此担心太多。Android 可以根据设备配置放大/缩小。所以只需为这些设备提供额外的图像仅在你没有得到他们想要的输出。

据我所知,支持多种设备,你必须考虑few general criteria

密度限定符:ldpi,mdpi,hdpi,xhdpi,etc通常在您想要提供不同分辨率的图像时使用。

尺寸限定符 + 方向限定符:small,normal,large,xlarge,sw600dp,normal-land,normal-port,etc通常在您想要提供不同的布局设计时使用。

即:单窗格布局,多窗格布局,根据不同的屏幕尺寸布局中的不同元素。

供参考: Download the example app from here and try to understand 如何支持多屏幕。

希望对你有帮助!!

【讨论】:

  • 但是在@MehulJoisar 无法做到这一点的情况下呢?拿 2 台设备,都是 XHDPI,一台是 XLarge 屏幕,最大 GL 纹理尺寸为 8192,一台是大屏幕,最大纹理尺寸为 2048。XHDPI 中有一个尺寸为 4096 的纹理(png 文件)文件夹。两个设备都从这里获取文件,但最大纹理大小为 2048 的第二个设备无法显示此纹理。因此,当应用程序运行时,一切都只是显示为黑框。您将如何为这两个设备提供单独的资源(因此较小设备的 2048x2048 图像)? ?
  • @Zippy:您可以应用多个限定符来获得所需的结果,只需创建 drawable-large-xhdpidrawable-large-xhdpi 。在查找图像时,它将检查大小限定符(大/xlarge),然后检查密度限定符(xhdpi)。供参考请通过this
  • 谢谢@MehulJoisar 是的,我已经用 XML 别名尝试了一段时间,但它的行为不像我预期的那样,假设我提供了一个 normal-xhdpi 文件夹,然后是一个 xhdpi 设备XLarge 屏幕仍然可以从普通文件夹中获取资源!不过,我想我已经设法弄清楚了,您必须为每个可能的大小/DPI 提供一个文件夹,这样才能正常工作。这是一个痛苦,因为我不得不创建 12 个额外的文件夹,每个文件夹都有一个 XML 别名到 nodpi 文件夹中的文件,但至少我认为它现在可以工作了!
  • @Zippy: android 根据限定符的优先级自动选择和scales 资源,如果您仅为 normal-xhdpi 文件夹提供图像,那么其他设备将从该文件夹获取图像,但它将由android根据其密度比自动缩放。您可以查看有关该比率的文档。我会坚持使用 9patch 或尝试生成 multiple apks 以减小大小
  • 感谢@MehulJoisar,我阅读了很多次文档,但我经常觉得它令人困惑。但是我确实相信我已经设法通过为我的情况使用别名来解决它(因此没有提供额外的位图,所以没有增加 APK 大小) - 我所做的只是在 drawable-normal-xhdpi 中为较小的纹理添加一个别名因此,所有具有此配置的设备都会选择较小的位图用于纹理。通过查看各种规格,我确信大多数“大”或“超大”屏幕 xhdpi 设备将支持大于 2048 的纹理(大多数似乎支持 4096)。
【解决方案2】:

这里有官方文档供您阅读:Supporting Multiple Screens 然后Supporting Different Screen Sizes

【讨论】:

    【解决方案3】:

    将您的所有图像放在drawable-hdpi、drawable-ldpi、drawable-mdpi、drawable-xhdpi和drawable-xxhdpi的所有不同文件夹中。 android 会处理的。

    【讨论】:

    • 假设我有一个图像 test.png test.png (25 * 25) 用于小型设备 test.png (35 * 35) 用于普通设备 test.png (45 * 45) 用于大型设备现在我必须将所有屏幕尺寸的 ldpi 图像放入 drawable-ldpi 文件夹中。你能告诉我我必须在 drawable-ldpi 文件夹中放入多少张图像吗?这不会是冲突,我们可以通过一个以上相同的图像在同一个文件夹中命名我们如何将所有屏幕尺寸的低密度图像保存在一个文件夹中,还是有其他方法? ???
    【解决方案4】:

    我总是将所有图像放在一个文件夹中(通常是 xhdpi)。 Android 系统会为您缩放它们,因此您不必担心将什么放在哪个文件夹中。

    以下是 Android 对此的评价:

    • 为不同的屏幕密度提供不同的位图可绘制对象

      通过 默认情况下,Android 会缩放您的位图可绘制对象(.png、.jpg 和 .gif 文件)和九补丁可绘制对象(.9.png 文件),以便它们在 每个设备上的适当物理尺寸。例如,如果您的 应用程序仅为基线、中等提供位图可绘制对象 屏幕密度 (mdpi),然后系统在 高密度屏幕,并在低密度时缩小它们 屏幕。这种缩放会导致位图中出现伪影。确保 你的位图看起来最好,你应该包括替代版本 不同的分辨率,不同的屏幕密度。这 可用于密度特定资源的配置限定符 分别是 ldpi(低)、mdpi(中)、hdpi(高)和 xhdpi(超高)。 例如,高密度屏幕的位图应该进入 drawable-hdpi/.

    您可以在此处找到文档:

    https://developer.android.com/guide/practices/screens_support.html

    希望对你有帮助

    【讨论】:

    • “我所有的图像都在一个文件夹中(通常是 xhdpi)”这不是一个好主意。我同意 Android 缩小可绘制,但缩放需要时间(这可能会减慢您的应用程序)并且如果图像的分辨率非常高,有时应用程序可能会崩溃
    • @pokerface 我以前从未经历过应用程序崩溃并制作了很多应用程序。我遇到的一个问题是我只是不知道如何处理其他尺寸。因为我制作了一张图像(通常是 hdpi),然后我不知道如何缩小它以降低分辨率
    • 是的,但是如果你让 Android 重新缩放你所有的图片,如果你在每个活动中有很多图片,你会得到一个 OutOfMemory 异常......
    • @HubertSolecki 图片在用户安装应用程序或制作 apk 时重新缩放。忘记是哪一个了。绝对不会实时执行。几年来我一直在使用这种方法。到目前为止没有问题
    • @KevinvanMierlo 我认为如果你几年来在 Android 上开发,你比我有更多的经验,但我昨天遇到了以下问题:[这里]stackoverflow.com/questions/16445635/…。我正在 Nexus 7 上开发我的应用程序,并将我的所有图片都放在一个可绘制的文件夹中。但是我已经在 Nexus 5 上进行了测试,并且由于 OutOfMemory 异常,应用程序变得缓慢、错误和崩溃......显然,当它膨胀包含 Drawable 的 ImageView 时,它会在那个时刻重新缩放它......当你也有许多图片 > 崩溃
    猜你喜欢
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    相关资源
    最近更新 更多