如果我手头有任何设备,我怎么知道我的 apk 将使用哪些资源?
例如drawable-hdpi
,或者drawable-xhdpi
或者drawable-xxhdpi
我不是在理论上询问这些文件夹中的哪些是在何时加载的,但特别是如果我手头有一个随机设备,我怎么知道将使用哪个?
3 回答
您必须了解密度桶的概念。看看这张图片(从这里收集)
ldpi
因此,在文件夹中调用并找到低于 160 dpidrawable-ldpi
和低于 320 并在文件夹中找到最高 480 dpixhdpi
等drawable-xhdpi
。
因此,将使用哪种变体完全取决于您手机的屏幕密度。为了更好地理解,请查看这篇文章,特别是表 1。
要获取手机的密度,您可以使用此代码
final float scale = getResources().getDisplayMetrics().density;
因此,如果您的手机属于 xhdpi 类别,介于 320 和 480 dpi 之间,drawable-xhdpi
则会使用变化,依此类推。
如果您想了解其背后的“魔力”,您可以查看一些 Google 搜索结果,例如:生成器 或解释。
在 Android 开发网站上,您可以找到密度桶的概述:密度桶
如果这仍然不能回答您的问题,您还可以在每个密度文件夹(hdpi、ldpi、mdpi ...)中举例几个不同的图像,然后查看您的设备或模拟器上显示的内容。
一种简单的诊断方法是将一个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