以非主题样式访问同级样式属性

时间:2011-06-26 20:39:26

标签: android android-theme

属性是否可以引用其同级属性,即同一<style>中存在的属性?

例如,

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

将产生错误,因为?限定符仅引用应用主题中存在的属性,而不是同一样式中的属性。

此功能对于我的库来说是必需的,以便与所有版本的Android正确兼容。

2 个答案:

答案 0 :(得分:2)

不,这个?语法只允许来自当前主题的引用属性。您必须重新编写样式才能在自定义主题中定义该值。

答案 1 :(得分:0)

您的代码产生错误,因为没有已知属性“customBackground”。但您可以通过在同一文件夹(res/values/)中创建XML文件来创建它,其中包含以下内容:

<?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