两者似乎在大多数情况下都可以工作,但?attr/似乎存在兼容性问题。我知道?意味着我们引用的是当前的主题值,但这并没有回答我的问题。
有人能解释一下并提到最佳实践吗?
我使用了一个主题,它继承了v21的Material主题和较低版本的AppCompat主题。我应该注意的并发症是什么?
谢谢。
发布于 2015-02-03 13:25:00
?attr/xyz
?android:attr/xyz
指android内置中已有的属性的值。
更具体地说,意味着额外的间接性。可以将其看作是取消对属性的引用以获取它所指向的资源,而不是引用属性本身。您可以在?android:attr/foo中看到这一点
使用哪个是最佳实践取决于您使用的是什么属性,如果它在内置android系统中可用,那么您可以使用它,否则您可以自己定义。
@android: ?android__和有什么不同
@android: --这是对现有资源或先前声明的样式(或可绘制或尺寸等)的引用。
?android: --是对当前主题中声明的项的引用*。一个例子可以最好地说明这一点。我喜欢把它们看作是样式“变量”,或者可以在主主题声明中设置的全局属性。
这篇文章解释了android 中的属性引用。
假设我们有一种样式,它目前正应用于一个常用的小部件,即ExpandableListView样式。对于我们的应用程序,我们希望覆盖groupIndicator和childDivider样式。
<style name="Widget.Holo.ExpandableListView" parent="Widget.Holo.ListView">
<item name="groupIndicator">@android:drawable/expander_group_holo_dark</item>
...
<item name="android:childDivider">?android:attr/listDivider</item>
</style>groupIndicator正在使用一个@android引用来引用一个可绘制的股票。为了覆盖它,我们需要创建一个新的样式(它的父元素是Widget.Holo.ExpandableListView),并用一个新的drawable覆盖groupIndicator。然后,我们需要在ExpandableListView上设置样式,或者为ExpandableListViews设置样式以使用新样式,或者直接通过构造函数将样式传递给视图。
childDivider正在使用?android属性引用。这更容易覆盖。在主应用程序主题中,添加设置此属性的项。
有关更多详细信息,请查看Referencing attributes
https://stackoverflow.com/questions/28291727
复制相似问题