Android进度条样式语法

时间:2012-01-04 15:51:21

标签: android

在进度条定义中,样式定义为

style="?android:attr/progressBarStyleHorizontal"

我不清楚这种语法是如何工作的。有人可以解释这种语法吗?

2 个答案:

答案 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"

您可以在Android developer guide

上找到更多信息

答案 1 :(得分:1)

android:attr意味着这个样式是从android的框架中挑选出来的。因此,如果您从框架http://bit.ly/yBC5pM浏览styles.xml的源代码并进行搜索 progressBarStyleHorizo​​ntal,你可以看到它继承自Widget.ProgressBar.Horizo​​ntal

<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的所有上述属性+属性(因为它的父级是这个)将继承到您的进度条。