android:icon ="@ drawable/my_icon"和android:icon ="?my_icon"之间的区别?

dr_*_*and 5 android drawable

我通常在xml中设置drawable as android:icon="@drawable/my_icon" 但是在某些项目中我看到了代码android:icon="?my_icon".

android:icon="@drawable/my_icon"和之间有什么区别android:icon="?my_icon"

Sho*_*uri 2

指向此文档并引用其中的答案:应用样式和主题

\n\n
\n

就像样式一样,主题也在 XML 元素中声明,并以相同的方式引用。不同之处在于,您通过 Android Manifest \xe2\x80\x94 中的 和 元素将主题添加到整个应用程序或活动中。主题不能应用于单个视图。

\n
\n\n

让我们以链接上定义的主题声明为例:

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<resources>\n  <style name="CustomTheme">  \n    <item name="windowBackground">@drawable/screen_background_white</item>\n    <item name="panelForegroundColor">#FF000000</item>\n    <item name="panelBackgroundColor">#FFFFFFFF</item>      \n    <item name="panelTextColor">?panelForegroundColor</item>\n    <item name="panelTextSize">14</item>\n    <item name="menuItemTextColor">?panelTextColor</item>\n    <item name="menuItemTextSize">?panelTextSize</item>\n  </style>\n</resources>\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

请注意使用 at 符号 (@) 和问号 (?) 来引用资源。at 符号表示我们正在引用先前在其他地方定义的资源(可能来自此项目或来自 Android 框架)。(例如,panelTextColor 使用与预先定义的分配给 panelForegroundColor 相同的颜色。)此技术只能在 XML 资源中使用。

\n\n

问号表示我们正在引用当前加载的主题中的资源值。这是通过通过名称值引用特定值来完成的。

\n
\n\n

因此,如果您看到该menuItemTextColor指向另一个项目,panelTextColor该项目的值前面再次有问号。为什么?因为我们再次引用当前加载的资源值customTheme

\n\n

同样,虽然您没有提到任何代码,但当前加载的主题可能已item调用my_icon,其值引用了指向项目中某些可绘制对象的资源值。

\n\n

希望这能让你清醒一点。

\n