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

5

我通常在xml中使用android:icon="@drawable/my_icon"来设置drawable,但是在一些项目中我看到了android:icon="?my_icon"的代码。

android:icon="@drawable/my_icon"android:icon="?my_icon"有什么区别呢?

1个回答

2
指向这个文档并参考那里的答案:应用样式和主题 与样式一样,主题也是在XML元素中声明的,并以相同的方式引用。不同之处在于,您通过Android清单中的和元素将主题添加到整个应用程序或活动中-无法将主题应用于单个视图。
让我们以链接上定义的主题为例进行说明:
<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="CustomTheme">  
    <item name="windowBackground">@drawable/screen_background_white</item>
    <item name="panelForegroundColor">#FF000000</item>
    <item name="panelBackgroundColor">#FFFFFFFF</item>      
    <item name="panelTextColor">?panelForegroundColor</item>
    <item name="panelTextSize">14</item>
    <item name="menuItemTextColor">?panelTextColor</item>
    <item name="menuItemTextSize">?panelTextSize</item>
  </style>
</resources>

请注意使用“@”符号和“?”符号引用资源。 “@”符号表示我们正在引用先前在其他地方定义的资源(可能来自此项目或Android框架)。 (例如,panelTextColor使用先前定义的panelForegroundColor分配的相同颜色。)这种技术只能在XML资源中使用。
“?”表示我们正在引用当前加载的主题中的资源值。这是通过按其名称值引用特定项来完成的。
因此,如果您看到menuItemTextColor指向另一个panelTextColor,该值前面再次有问号。为什么?因为我们再次从当前加载的customTheme引用资源值。
同样,尽管您没有提到任何代码,但当前加载的主题可能具有称为my_icon的项目,其值引用指向项目中某个drawable的资源值。
希望这能让你清楚一点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接