我通常在 xml 中将drawable设置为android:icon="@drawable/my_icon"
但在一些项目中我看到了代码android:icon="?my_icon"
.
有什么区别android:icon="@drawable/my_icon"
and android:icon="?my_icon"
?
指向此文档并引用其中的答案:应用样式和主题 http://www.linuxtopia.org/online_books/android/devguide/guide/topics/ui/themes.html
就像样式一样,主题也在 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>
请注意使用 at 符号 (@) 和问号 (?) 来引用资源。 at 符号表示我们正在引用先前在其他地方定义的资源(可能来自此项目或来自 Android 框架)。 (例如,panelTextColor 使用与预先定义的分配给 panelForegroundColor 相同的颜色。)此技术只能在 XML 资源中使用。
问号表明我们引用当前加载主题中的资源值。这是通过通过名称值引用特定值来完成的。
所以,如果你看到了menuItemTextColor
指向另一个项目panelTextColor
它的值前面又打上了问号。为什么?因为我们再次引用当前加载的资源值customTheme
.
同样,虽然您没有提到任何代码,但当前加载的主题可能有item
called my_icon
其值引用了指向项目中某些可绘制对象的资源值。
希望这能让你清醒一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)