【问题标题】:How to include different resolution icons with Android App?如何在 Android App 中包含不同分辨率的图标?
【发布时间】:2010-06-09 22:56:35
【问题描述】:

Android 文档表明我应该为不同分辨率的手机屏幕提供不同的图标。 http://developer.android.com/guide/practices/screens_support.html#qualifiers

  • res/drawable-ldpi/my_icon.png // icon image for low density
  • res/drawable-mdpi/dpi/my_icon.png // icon for medium density
  • res/drawable-hdpi/my_icon.png // icon image for high density

这在使用 Eclipse for Android 编译时不起作用。有没有人有适用于多个分辨率图标的清单文件的示例?

谢谢, 格里

【问题讨论】:

  • 你能粘贴你得到的错误吗?
  • 我见过一些例子,你制作了一个用作开关的 xml 文件。您将图标设置为该 xml 文件,然后它具有一些机制来确定要使用的图标。我不确定如何针对您的情况执行此操作,但我确定您可以找到这样的示例(尤其是 tabhost)
  • 另外,如果您认为有问题,请发布您的清单文件。
  • 你的项目目标是什么?不同的内容策略仅适用于 Android 1.6
  • 我认为mdpi 的额外dpi 目录是一个错字(在文档中),它应该是res/drawable-mdpi/my_icon.png

标签: android icons manifest


【解决方案1】:

您仍应将您的图标称为@drawable/my_icon

开发人员指南的Providing Resources 部分更进一步,并在以下部分中展示了如何创建更复杂的别名:

创建别名资源

如果您希望将某个资源用于多个设备配置(但不是用于所有配置),则无需将同一资源放在每个备用资源目录中。相反,您可以(在某些情况下)创建一个替代资源,作为保存在默认资源目录中的资源的别名。

注意:并非所有资源都提供一种机制,您可以通过该机制为另一个资源创建别名。特别是,xml/ 目录中的动画、菜单、原始资源和其他未指定的资源不提供此功能。

例如,假设您有一个应用程序图标icon.png,并且需要针对不同区域设置的唯一版本。但是,两个语言环境,English-Canadian 和 French-Canadian,需要使用相同的版本。您可能认为您需要将相同的图像复制到 English-Canadian 和 French-Canadian 的资源目录中,但事实并非如此。相反,您可以将两者都使用的图像保存为icon_ca.pngicon.png 以外的任何名称)并将其放在默认的res/drawable/ 目录中。然后在res/drawable-en-rCA/res/drawable-fr-rCA/ 中创建一个icon.xml 文件,该文件使用<bitmap> 元素引用icon_ca.png 资源。这允许您只存储一个版本的 PNG 文件和两个指向它的小 XML 文件。 (示例 XML 文件如下所示。)

可绘制

要为现有的可绘制对象创建别名,请使用<bitmap> 元素。例如:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/icon_ca" />

如果将此文件保存为icon.xml(在备用资源目录中,例如res/drawable-en-rCA/),它会被编译成可以引用为R.drawable.icon 的资源,但实际上是@987654340 的别名@资源(保存在res/drawable/中)。

但是,如果您只是为不同的屏幕密度使用不同的图标,则不需要创建别名。 the table you link to 中显示的资源目录限定符是 ldpimdpihdpi。当locating alternative resources(强调)时使用限定符:

hdpi 限定符表示该目录中的资源用于具有高密度屏幕的设备。虽然每个可绘制目录中的图像都针对特定的屏幕密度进行了调整,但文件名是相同的。这样,您用于引用 icon.pngbackground.png 图像的资源 ID 始终相同,但 Android 会选择与当前设备配置最匹配的可绘制版本

【讨论】:

  • 如果我将我的图标称为@drawable,我可以将不同分辨率的图标放入drawable-ldpi等,运行时会找到正确的分辨率图标吗?您有可以发布的示例清单文件吗?
  • @Gerry,是的。我更新了我的答案以包含整个文档堆。与仅查找替代资源不完全相关,而是更进一步并仅针对某些语言环境覆盖图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多