在进度条定义中,样式定义为
style="?android:attr/progressBarStyleHorizontal"
我不清楚这种语法是如何工作的。有人可以解释这种语法吗?
答案 0 :(得分:5)
该语法用于引用系统样式属性,它类似于用于引用Android系统预定义的资源的语法:而在一般资源情况下,您使用例如@android:drawable/ic_media_play
在XML布局中包含的ic_media_play.png
UI元素的android:src
属性值中引用由文件ImageButton
表示的Drawable,使用{@ 1}}构建属性引用一个?
而不是@
,但其余部分遵循相同的规则并以相同的方式工作。
特别是,属性通常存储在res/values/attrs.xml
中,您可以在其中找到(查看存储在Android SDK中的系统资源)以下内容
<attr name="progressBarStyleHorizontal" format="reference" />
表示该属性是对其他资源的引用。 style属性在res/values/themes.xml
中以以下方式定义:
<item name="progressBarStyleHorizontal">
@android:style/Widget.ProgressBar.Horizontal
</item>
这确实是对系统Widget.ProgressBar.Horizontal
中样式res/values/styles.xml
的引用,正如另一个答案所描述的那样。
请注意,在系统知道期望引用属性资源的上下文中,您甚至可以省略资源类型(即attr/
部分),从而产生如下语法:
android:textColor="?android:textColorSecondary"
上找到更多信息
答案 1 :(得分:1)
android:attr意味着这个样式是从android的框架中挑选出来的。因此,如果您从框架http://bit.ly/yBC5pM浏览styles.xml的源代码并进行搜索 progressBarStyleHorizontal,你可以看到它继承自Widget.ProgressBar.Horizontal
<style name="Widget.ProgressBar.Horizontal" parent="@style/Widget.ProgressBar"> <item name="maxHeight">20.0dip</item> <item name="indeterminateOnly">false</item> <item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal</item> <item name="progressDrawable">@drawable/progress_horizontal</item> <item name="minHeight">20.0dip</item> </style>
Widget.Progressbar的所有上述属性+属性(因为它的父级是这个)将继承到您的进度条。