安卓中的"?colorPrimary"与"?attr/colorPrimary"有何区别?

10

我找不到关于以下两者区别的信息:

android:textColor="?attr/colorPrimary"

vs

android:textColor="?colorPrimary"

我已经阅读过"?attr"的含义是指当前主题中指定的属性值,但是没有"attr"也会给出相同的结果(即在我的主题中定义的颜色)。其他属性的表现也类似吗?
例如: android:background="?attr/selectableItemBackground" 是否等同于 android:background="?selectableItemBackground"
这里有说明它们不同
非常感谢。

这个问题不是你链接的那个问题的重复吗? - IAmGroot
简单阅读后,似乎 attr/selectableItemBackground 会根据主题而改变,而另一个则不会。在您的情况下,它很可能与默认主题相同。尝试更改主题,然后进行比较。 - IAmGroot
更改主题不会更改任何情况下的颜色。在两种情况下,它都会产生我定义的颜色(colorPrimary)。我使用继承Theme.AppCompat.Light.DarkActionBar的主题。 - Derek K
1
如果您正在覆盖主要颜色,我不会期望它发生任何变化。那个相同问题的另一个答案表明它们都是相同的,只是写法不同。其中一种可能是缩写形式。无论哪种方式,除非您遇到某些问题,否则不必担心它。 - IAmGroot
1
好的,我在文档中找到了答案。请看我的帖子。谢谢。 - Derek K
1个回答

6
好的,我终于在文档中找到了答案:
因为系统资源工具知道此上下文中需要属性资源,所以您不需要显式声明类型(这将是 ?android:attr/textColorSecondary)—您可以排除 attr 类型。
因此,我的推断是:AppCompat 库属性被视为自定义属性,因此我们使用带有问号但没有 "android" 关键字的方式指向它们。而 "attr" 是资源类型,对于平台和自定义属性都是可选的(来自文档)。 Android 文档

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