显示密度和资源使用情况(ldpi / mdpi / hdpi / xhdpi)

时间:2013-04-05 15:14:20

标签: android android-layout

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

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

它说我的设备是240dpi。但实验上我发现android威胁我的设备只作为MDPI。我肯定会这样。我用另一个800x480(中兴通讯)测试了相同的结果是相同的 - 它在displayDensity中显示240但是android威胁它作为MDPI设备...但为什么会这样呢?在android.devepoler上,他们说240dpi是HDPI。我完全糊涂了。为什么heck 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。

2 个答案:

答案 0 :(得分:0)

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

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

希望它有所帮助。

答案 1 :(得分:0)

很抱歉延迟,所以,首先,你必须决定你想要的公开。你必须记住,周围有许多设备,几乎不可能涵盖所有这些设备。我建议你从认为正常的设备(屏幕正常和MDPI密度)开始,因为这是基线。然后,基于第一个问题,担心别人。了解资源文件夹的区别仅在必要时才会完成。在大多数情况下,用于基线的资源适用于每个人。

希望它有所帮助。