【问题标题】:Setting drawable folder to use for different resolutions设置可绘制文件夹以用于不同的分辨率
【发布时间】:2013-10-18 12:57:40
【问题描述】:

对于我需要在我的应用程序中使用的每个图标,我有 4 种不同的尺寸。问题是 My Nexus 7 (1280 x 800) 和 Galaxy s2 (800 x 480) 似乎使用了 drawable-hdpi 中的资源。如何强制 Nexus 使用 drawable-xhdpi 中的资源,然后使用 10 英寸选项卡使用 drawable-xxhdpi。

我的清单文件中有这个

<supports-screens android:resizeable="true"
              android:smallScreens="true"
              android:normalScreens="true"
              android:largeScreens="true"
              android:xlargeScreens="true"
              android:anyDensity="true" />

【问题讨论】:

  • 正如其他人指出的那样,问题不在于如何强制 Android 以您想要的方式运行,而是让您了解资源选择在 android 中的工作原理并正确使用它。我强烈建议您阅读官方文档。
  • 我的应用程序没有使用正确的密度(它在 hdpi 可用的情况下使用 mdpi)。您的代码 sn-p 帮助我解决了我的问题,并且可能对其他人有所帮助,因此我以保存的名义对您的问题进行了投票。
  • 我认为作者应该针对最新的设备和新的 android api 更新他们的答案。

标签: android android-manifest android-drawable android-screen-support android-screen


【解决方案1】:

如何强制 Nexus 使用 drawable-xhdpi 中的资源,然后 10 英寸的选项卡要使用 drawable-xxhdpi 吗?

你不能。

限定符hdpi,xhdpi,xxhdpi 描述的是设备的屏幕密度,而不是屏幕的大小。 来自official doc

屏幕密度

屏幕物理区域内的像素数量;通常 称为 dpi(每英寸点数)。例如,“低”密度 与屏幕相比,屏幕在给定物理区域内的像素更少 “正常”或“高”密度屏幕。为简单起见,Android 将所有 实际屏幕密度分为四种广义密度:低、中、 高,超高。

如果您还想支持平板电脑,请使用large, xlarge 限定符。 Nexus 7 是large-hdpi 平板电脑(技术上它是tvdpi,但从hdpi 获取图像)。因此,如果您想为 Nexus 7 放置图像,请创建一个名为 drawable-large-hdpi 的文件夹并将图像放在那里。

注意:这是 Nexus 7 的特殊情况。因为即使 Nexus 7 是 7 英寸平板电脑,它的分辨率也只有 1280 * 800。所以这是一个hdpi 设备。但普通 7 英寸设备的分辨率较低,为 1024 * 600。所以它们是mdpi 设备。所以drawable限定符可以改变。 (根据我自己的经验,首先为7英寸设备放置一个文件夹drawable-large-mdpi并在Nexus 7上检查。如果图像没有问题,您不必放置另一个文件夹。因为如果特定文件夹不存在,Android将检查最近的可能文件夹并针对设备屏幕对其进行优化)

现在关于 10 英寸平板电脑外壳,它们是 xlarge 设备,它们的密度可以从 mdpi 更改为 xhdpi(Nexus 10)。但许多分辨率为 1280 * 800 并且是mdpi 设备。

更好的做法是放下面的drawables

// for Phones
drawable-ldpi
drawable-mdpi
drawable-hdpi

//for 7 inch tablets
drawable-large-mdpi
drawable-large-hdpi(for Nexus 7)

// for 10 inch tablets
drawable-xlarge-mdpi

【讨论】:

  • 很好的解释,AndroidVogue 首先得到了正确的答案,但我认为可能有助于更好地解释我和其他任何类似问题的人。努力
  • +1 拯救了我的一天,比谷歌开发者的网站解释得更好..太棒了!!
  • 如果您不需要区分 Nexus7 / 其他 7 英寸平板电脑,是否只使用 drawable-large 和 drawable-xlarge 怎么样?
  • 如果你只想要那个,只使用drawable-largedrawable-xlarge。除了顺序之外,使用限定词没有特定的规则。
  • @RKN 感谢您的回答。我正在使用 Nexus 9 英寸平板电脑,所以如何为此定义可绘制文件夹。分辨率 - 2048 x 1536
【解决方案2】:

尝试将Configuration qualifiers 用于您的资源。这是最佳实践。喜欢res/drawable-normal-hdpi-port/icon.png

参考链接:Configuration qualifiers

谢谢。

【讨论】:

  • 所以我可以有 mdpi、hdpi 和 xhdpi 用于正常,然后 3 个用于 large 和 x-large?
  • @Amanni 没必要。根据您的需要创建文件夹。我的意思是你的目标是什么类型的设备。对于 Nexus 7,您可以创建 res/drawable-large-hdpi 文件夹。它将使用该文件夹中的图像。所以现在你有两个 Hdpi Drawable 文件夹 - 一个用于480x800 -&gt; drawable-hdpi,而新创建的一个用于Nexus 7 -&gt; drawable-large-hdpi 平板电脑。
【解决方案3】:
The problem is My Nexus 7 (1280 x 800) and galaxy s2 (800 x 480) seem to use the resources in drawable-hdpi

这取决于像nexus 7 这样的设备有240dpi 这是一个hdpi 设备,如果您在samsung 中测试相同的设备,它将从hdpi 中获取可绘制资源tab 2 它将从中获取相同的可绘制资源mdpi 因为它是一个 mdpi 设备

【讨论】:

  • 基本上我想要 mdpi 为 480x320,hdpi 为 800x480,xhdpi 为 1280x800
  • 不,他们取自 hdpi 而不是 mdpi
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-29
  • 2011-06-27
  • 1970-01-01
相关资源
最近更新 更多