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

时间:2014-01-10 08:27:06

标签: android drawable

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

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

1 个答案:

答案 0 :(得分:2)

指向此文档并参考其中的答案:Applying styles and themes

  

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

让我们对链接上定义的主题进行示例声明:

<?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>
  

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

     

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

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

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

希望这会让你有所了解。