首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >布局中的"?attr/xyz“、"?android:xyz”和"?android:attr/xyz“有什么不同?

布局中的"?attr/xyz“、"?android:xyz”和"?android:attr/xyz“有什么不同?
EN

Stack Overflow用户
提问于 2015-02-03 13:06:38
回答 1查看 520关注 0票数 0

两者似乎在大多数情况下都可以工作,但?attr/似乎存在兼容性问题。我知道?意味着我们引用的是当前的主题值,但这并没有回答我的问题。

有人能解释一下并提到最佳实践吗?

我使用了一个主题,它继承了v21的Material主题和较低版本的AppCompat主题。我应该注意的并发症是什么?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-02-03 13:25:00

?attr/xyz

?android:attr/xyz

指android内置中已有的属性的值。

更具体地说,意味着额外的间接性。可以将其看作是取消对属性的引用以获取它所指向的资源,而不是引用属性本身。您可以在?android:attr/foo中看到这一点

使用哪个是最佳实践取决于您使用的是什么属性,如果它在内置android系统中可用,那么您可以使用它,否则您可以自己定义。

@android: ?android__和有什么不同

@android: --这是对现有资源或先前声明的样式(或可绘制或尺寸等)的引用。

?android: --是对当前主题中声明的项的引用*。一个例子可以最好地说明这一点。我喜欢把它们看作是样式“变量”,或者可以在主主题声明中设置的全局属性。

这篇文章解释了android 中的属性引用。

假设我们有一种样式,它目前正应用于一个常用的小部件,即ExpandableListView样式。对于我们的应用程序,我们希望覆盖groupIndicator和childDivider样式。

代码语言:javascript
复制
<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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28291727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档