1

如果我手头有任何设备,我怎么知道我的 apk 将使用哪些资源?
例如drawable-hdpi,或者drawable-xhdpi或者drawable-xxhdpi
我不是在理论上询问这些文件夹中的哪些是在何时加载的,但特别是如果我手头有一个随机设备,我怎么知道将使用哪个?

4

3 回答 3

2

您必须了解密度桶的概念。看看这张图片(从这里收集) 在此处输入图像描述

ldpi因此,在文件夹中调用并找到低于 160 dpidrawable-ldpi 和低于 320 并在文件夹中找到最高 480 dpixhdpidrawable-xhdpi

因此,将使用哪种变体完全取决于您手机的屏幕密度。为了更好地理解,请查看这篇文章,特别是表 1。

要获取手机的密度,您可以使用此代码

final float scale = getResources().getDisplayMetrics().density;

因此,如果您的手机属于 xhdpi 类别,介于 320 和 480 dpi 之间,drawable-xhdpi则会使用变化,依此类推。

于 2019-08-31T10:50:26.263 回答
2

如果您想了解其背后的“魔力”,您可以查看一些 Google 搜索结果,例如:生成器解释。

在 Android 开发网站上,您可以找到密度桶的概述:密度桶

如果这仍然不能回答您的问题,您还可以在每个密度文件夹(hdpi、ldpi、mdpi ...)中举例几个不同的图像,然后查看您的设备或模拟器上显示的内容。

于 2019-08-31T10:39:01.713 回答
0

一种简单的诊断方法是将一个strings.xml(或您选择的资源类型)添加到一个合格的 res/values- 目录,其字符串值对应于密度,例如:

res/values-xxhdpi
    strings.xml (containing)
        <string name="selected_density">xxhdpi</string>

您也可以对其他资源类型(例如整数)执行此操作。这让系统为您完成工作。对每个感兴趣的密度执行此操作,并在值/版本中提供默认值。

然后在代码中简单地:

String densityStr =  context.getString(R.string.selected_density);

请参阅Configuration qualifier names此处的表格:https ://developer.android.com/guide/topics/resources/providing-resources

于 2019-08-31T11:54:02.763 回答