【问题标题】:Use the same drawable for 2 different SDK versions对 2 个不同的 SDK 版本使用相同的 drawable
【发布时间】:2014-11-10 19:56:08
【问题描述】:

我正在尝试在我的应用中添加对新 Material UI 的支持,但遇到了一个烦人的情况。

在 SDK 14 之前,黑色应用菜单需要白色图标。从 SDK 14 开始,Holo 灯光主题需要深色图标。现在,当迁移到 Material 时,我再次需要白色图标。所以基本上我有一个文件夹drawable-hdpi-v11,一个drawable-hdpi-v14和一个drawable-hdpi-v21。 drawable-hdpi-v11 和 drawable-hdpi-v21 具有相同的图像,当然 Lint 会警告我重复了相同的资源。

我查看了别名Creating alias resources,但它似乎没有提供我需要的功能。你知道有什么方法可以在不复制资源的情况下获得相同的结果(SDK=21 为白色,SDK>=14 和 SDK

【问题讨论】:

  • developer.android.com/design/style/iconography.html 注意:这只是指南。您决定哪种前景色最适合您的背景。
  • 你说的是动作栏图标吗?如果是这样,如果您想始终在深色背景上使用白色图标,那么总会有 Light.DarkActionBar 主题。
  • 你为什么不认为别名会起作用?
  • @Funkystein:我知道它们只是指导方针,但我正在寻找一致性。
  • @ianhanniballake 使用 AppCompat 是我的备份选项。我的目标是与操作系统保持一致,这就是为什么我试图让应用尽可能地与操作系统融合。

标签: android android-xml android-resources android-drawable


【解决方案1】:

您希望@drawable/ic_action_heart 解析为:

  • 在 >= 14 和 上变暗
  • 白色 >= 21

在这种情况下:

  • res/drawable-hdpi-v14/ 中有一个暗色版本的图标ic_action_heart.png

  • res/drawable-hdpi/ 中有一个轻量版的图标ic_action_heart_white.png

  • res/drawable-hdpi-v21/中有一个可绘制别名,名为ic_action_heart.xml,指向@drawable/ic_action_heart_white

  • res/drawable-hdpi/中有一个可绘制别名,名为ic_action_heart.xml,指向@drawable/ic_action_heart_white

当然,您在其他密度桶中也会有相同的基本结构(例如,-xxhdpi)。由于密度比 API 级别更重要,我认为您将需要具有特定于密度的别名版本。

【讨论】:

  • 值得一提的是,在为 4 个图标实现别名后,生成的 APK 实际上比具有重复资源的 APK 大 2 KB。
  • @Adrian-CostinȚundrea:这种行为很可能取决于资源本身的大小——图标通常是非常小的文件。不过,好处是更多的是 DRY,因此您不必维护图标的重复副本。
  • 所有分辨率的副本总大小约为 15KB。所以我猜想压缩资源实际上比链接的开销节省了更多的数据。但是 DRY 仍然是 DRY,正如他们所说,没有警告的构建是一个快乐的构建:)。一个很好的案例研究思路。
猜你喜欢
  • 2012-06-19
  • 2012-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多