【问题标题】:drawable vs. drawable-ldpi/drawable-mdpidrawable 与 drawable-ldpi/drawable-mdpi
【发布时间】:2011-05-18 15:50:37
【问题描述】:

所有的 Android 文档都提到了“drawable”目录。但是,当我在 Eclipse 中创建 Android 项目时,它不会创建“/res/drawable”目录,但会创建“/res/drawable-ldpi”和“/res/drawable-mdpi”。我想这些与像素分辨率有关,但这里到底发生了什么?当我逐步完成教程时,我手动创建了一个“可绘制”目录并将我的资源放在那里,但我需要吗?如果仅存在“drawable-{l|m}dpi”,对“/res/drawable/”的引用是否有效?

【问题讨论】:

    标签: android


    【解决方案1】:

    In this answer、@RomainGuy 提到您应该将适当的图像保存到它们各自的文件夹(mdpi、xhdpi)和其他来源,例如您的 drawable 文件夹中的可绘制对象的 .xml 文件。

    例如,
    如果您将使用 hdpi 设备,而您没有在 hdpi 文件夹中放置任何图像,它不会崩溃;它将改为从下一个最适合的文件夹(即 mdpi)调整图像大小并展开图像。

    【讨论】:

      【解决方案2】:

      当为各种屏幕密度创建新应用程序时,最新的 SDK 会为您创建大量可绘制文件夹,但奇怪的是,文档中提到的默认“可绘制”文件夹从未默认为我创建过。

      如果您为当前默认创建的所有六个密度文件夹(从 drawable-ldpi 到 drawable-xxxhdpi)复制并调整图形资源的大小,那么对于重型图形应用程序,您的应用程序大小将变得臃肿,更不用说其他问题,例如堆大小崩溃(他们应该为不同的设备堆大小提供不同的文件夹)。

      目前,我将所有图形都放在 drawable-hdpi 文件夹中,除了 xhdpi、xxhdpi 和 xxxhdpi 文件夹中用于更高分辨率的启动器图标的副本。我没有在 mdpi 和 ldpi 文件夹中放任何东西,实际上我已经删除了这些文件夹以保持应用程序清洁。我也可以将 drawable-hdpi 重命名为仅可绘制,但保留默认名称,因为无论如何它在这种情况下都充当默认文件夹。

      【讨论】:

        【解决方案3】:

        我相信这是在 Android 1.6 中添加的。都在这里解释了:http://developer.android.com/guide/practices/screens_support.html

        【讨论】:

          【解决方案4】:

          是的,你需要在 Eclipse 中创建一个默认的 /res/drawable 目录。

          如果要使用 -hdpi/-mdpi/-ldpi 文件夹,则需要制作单独的 xml 布局来引用它们。

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

          【讨论】:

            【解决方案5】:

            我认为这与您生成 Android 项目的方式有关。通常我会创建一个 hdpi、mdpi 和 ldpi 文件夹。基本上,“可绘制”是默认设置。 如果你的所有资源都在 hdpi 文件夹中,并尝试在 ldpi 设备上运行它,我相信你会遇到某种异常(我没有测试过,但我相信是这样的).here 解释了没有默认资源时会发生什么。

            为了安全起见,您应该在主“drawable”文件夹中保留默认的资源集合(是的,您可能必须手动创建),并确保与旧版本的 Android 兼容。 Android 将首先检查特定密度文件夹,但如果在该密度中找不到特定资源,它将回滚到默认的可绘制文件夹。

            【讨论】:

            • 如果应用程序只有这个可绘制文件夹,Android 将从 ldpi 设备上的 hdpi 文件夹中缩放资源。
            • @Pixie:看起来是这样!我应该首先对此进行更多研究。此链接:developer.android.com/guide/topics/resources/… 详细说明了它的工作原理。为了安全起见,我仍然可能会在主文件夹中放置一些默认可绘制对象,但很高兴知道这一点,谢谢!
            • @Michael,这是不正确的,请参阅stackoverflow.com/questions/24067728/…
            • @Michael "但是,如果唯一可用的资源大于当前屏幕,系统将不会使用它们,如果没有其他资源与设备配置匹配,您的应用程序将崩溃"
            • "但是,当系统在寻找特定密度的资源时,在特定密度的目录中没有找到时,它不会总是使用默认资源。系统可能会使用一个其他密度特定的资源,以便在缩放时提供更好的结果。例如,当寻找低密度资源并且它不可用时,系统更倾向于缩减资源的高密度版本。 。”developer.android.com/guide/practices/…
            【解决方案6】:

            在 Android 1.6 中添加了 Hdpi、mdpi 和 ldpi 限定符。如果您要支持 Android 1.5,则应将所有中等 dpi 可绘制对象放入默认可绘制目录中。

            你可以阅读它here

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2012-02-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多