对2个不同的SDK版本使用相同的drawable

时间:2014-11-10 19:56:09

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

我正在尝试在我的应用中添加对新材质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< 14或SDK> = 21的白色图像,SDK> = 14和SDK< 21的黑色图像),而不重复资源?

1 个答案:

答案 0 :(得分:7)

您希望@drawable/ic_action_heart解析为:

  • 白色< 14
  • 暗上> = 14并且< 21
  • white on> = 21

在那种情况下:

  • ic_action_heart.png

  • 中将图标的深色版本设为res/drawable-hdpi-v14/
  • ic_action_heart_white.png

  • 中将图标的简易版设为res/drawable-hdpi/
  • ic_action_heart.xml中有一个名为res/drawable-hdpi-v21/的可绘制别名,指向@drawable/ic_action_heart_white

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

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