我通常将xml中的drawable设置为android:icon="@drawable/my_icon"
但在某些项目中,我看到了代码android:icon="?my_icon"
。
android:icon="@drawable/my_icon"
和android:icon="?my_icon"
之间有什么区别?
答案 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的资源值。
希望这会让你有所了解。