【问题标题】:display density and resources usage (ldpi/mdpi/hdpi/xhdpi)显示密度和资源使用情况 (ldpi/mdpi/hdpi/xhdpi)
【发布时间】:2013-04-05 15:14:20
【问题描述】:

所以我得到了 800x480 显示屏的 HTC 智能手机。我一直以为是HDPI设备。并且使用以下代码确保了我:

Display display = activity.getWindowManager().getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);
displayDensity = displayMetrics.densityDpi;

它说我的设备是 240dpi。但在实验中,我发现 android 仅以 MDPI 威胁我的设备。我确定这一点。我用另一个 800x480 (ZTE) 进行了同样的测试,结果是一样的——它在 displayDensity 中显示 240,但 android 威胁它作为 MDPI 设备......但为什么会这样?在 android.devepoler 上,他们说 240dpi 是 HDPI。我完全糊涂了。为什么 240 被威胁为 MDPI?

我如何发现 android 将我的 HTC 视为 MDPI 设备: 简而言之,我做了什么来确保 - 我将一个大图像放入 drawable-hdpi(猜测 AOS 会使用它),将较小的图像放入 drawable-mdpi,然后运行一个应用程序来查看它将使用哪个。它总是使用 drawable-mdpi 中的图像而不是 drawable-hdpi。为了知道哪个图像在我的设备上看起来如何,我之前运行了应用程序,将图像放入项目的可绘制文件夹中。
但是,就像我上面提到的,我猜测我的 800x480 HTC 是 HDPI,因为代码基于 displayDensity 而不是基于配置。配置说我的设备是 Configuration.SCREENLAYOUT_SIZE_NORMAL,这似乎就是 AOS 仅将我的设备视为 MDPI 的原因。所以结合 240dpi 的 DisplayDensity(必须是 HDPI 而不是 MDPI)真的很令人沮丧。所以现在的问题是为什么使用 240dpi 配置的显示密度将设备设置为 MDPI 类型?这是什么原因?我在想检测设备类型的唯一方法是它的显示密度。如果是 240dpi 则必须是 HDPI 设备而不是 MDPI。

【问题讨论】:

  • 您如何确定它被视为 mdpi 设备?
  • “但通过实验我发现 android 仅以 MDPI 威胁我的设备。” -- 请编辑您的问题以完整准确地解释您是如何测试的。更重要的是,当您检查 Configuration density 值(用于确定正在加载的资源的值)时,您学到了什么?

标签: android android-layout


【解决方案1】:

您可以尝试阅读此页面:http://developer.android.com/guide/topics/resources/providing-resources.html,当您想要组织资源文件夹时,它会显示有关屏幕密度和其他内容的完整说明。

关于被视为 MDPI 的设备,它可能类似于 Nexus 7,我们确信它是 MDPI,但它使用的是来自 HDPI 的图像以及来自 MDPI/sw600dp 的一些值(您会在该链接中找到更好的解释上面),因为它的密度实际上是 TVDPI,所以它是 HDPI 和 MDPI 之间的“中间”密度。尝试在 GooglePlay 上下载一个名为 ScreenInfo 的应用程序。它显示有关设备屏幕的各种信息,并可以帮助您确定您的 HTC。

希望对你有帮助。

【讨论】:

  • 我确实阅读了这篇文章,这是一个问题。感谢您的提示,我将尝试该应用程序
  • ScreenInfo 说我的 HTC 的“框架资源选择”是“正常/HDPI”。我仍然很困惑是HDPI还是MDPI?因为它的工作方式与您描述的相同,它可以使用来自 HDPI 的图像,但可以使用来自 MDPI 的布局。对我来说,这看起来像是“开发人员免费使用”的错误资源,例如“您的 android 应用程序有什么问题吗?快来获取吧!”...
  • 由于设备的身份存在此问题,但您现在确定您的 HTC 使用来自 HDPI 的图像,您应该根据他的屏幕尺寸而不是密度来提供布局,以避免出现类似的问题这也是最佳实践之一,因为您可能拥有许多屏幕尺寸相同但密度不同的设备,因此,只有您的图像应该基于此,而不是您的布局。例如,您是否尝试过基于其屏幕宽度提供布局?上面的链接显示了如何做到这一点。
  • 所以我创建了drawable-normal,我的HTC从那里使用了drawables。这是因为可以绘制更好的图像。如果我要使用 drawable-wXXX 文件夹,我什至无法想象我必须使用多少个这样的文件夹。从哪里开始?走哪一步?比如我应该从 w120 开始吗​​?然后什么?接下来是130? 160?对我来说正常==MDPI,但对aos来说不是这样。这也意味着我应该同时使用 dpi-folders 和 size-folders,这意味着应用程序大小会增加,即使 ldpi == 文件中的文件很小等等。这意味着将应用程序大小增加 x2,然后在此处添加 wXXX-folders...
【解决方案2】:

抱歉耽搁了,所以,首先,你必须决定你想要哪个公众。您必须记住,周围有无数设备,几乎不可能覆盖所有设备。我建议您从被认为是正常的设备(屏幕正常和 MDPI 密度)开始,因为这是基线。然后,基于第一个担心其他人。了解资源文件夹的区分仅在必要时进行。在大多数情况下,用于基线的资源对每个人都很有效。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多