2011-06-26 82 views
2

属性是否可以引用其同级属性,即存在于同一个<style>中的属性?访问非主题风格中的同级别风格属性

例如,

<style name="Widget.A"> 
    <item name="customBackground">something</item> 
    <item name="android:background">?customBackground</item> 
</style> 

会产生由于?限定符引用的错误仅属性存在于施加的主题,而不是相同的风格内。

为了与所有版本的Android兼容,此功能对我的图书馆是必需的。

回答

2

不,这个?语法只允许当前主题的引用属性。您将不得不重新编写自己的样式,以在自定义主题中定义该值。

+0

感谢您的回答。我认为这可能是这种情况。一个快速跟进:如果我要将样式XML放入'values-v11'中,是否可以在以前的API级别上显式读取并手动解析它? –

0

由于没有已知属性“customBackground”,您的代码会产生错误。但是你可以用下面的内容作出一个XML文件在同一文件夹(res/values/)创建:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="Widget.A"> 
     <attr name="customBackground" format="reference"/> 
    </declare-styleable> 
</resources> 

这个声明告诉我们,你已经有了一个风格Widget.A,其中有一个参数称为customBackground,在这个例子中它的有效值是对其他属性的引用。当然,您可以将format属性设置为任何您需要的值。不幸的是,Android文档没有包含这类声明的明确描述,所以我建议您在Android源代码中查看attrs.xml

+0

我已经在实际执行中做了这个。这个例子是一个最简单的例子,它只是说明我正在尝试完成的事情。 –

+0

如果您正确声明Widget.A具有“customBackground”属性,那么引用此属性应该没有任何问题。至少我可以证实我已经做出了与你的例子完全相同的风格,并且它没有问题地编译。你会得到什么样的错误? – Malcolm

+0

然而,它会进行编译,但'''限定符指的是在根主题中定义的属性,而我正在寻找引用在相同小部件样式中定义的属性。请参阅https://github.com/JakeWharton/StackOverflowQuestion6486594 –