假设我正在创造一些新风格的属性。我宣布他们正是如此(这是how the documentation says to do it:声明样式的要点是什么?
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TriangleView">
<attr name="direction">
<enum name="NE" value="0" />
<enum name="NW" value="1" />
<enum name="SW" value="2" />
<enum name="SE" value="3" />
</attr>
</declare-styleable>
<declare-styleable name="BannerView">
<attr name="direction">
<enum name="NE" value="0" />
<enum name="NW" value="1" />
<enum name="SW" value="2" />
<enum name="SE" value="3" />
</attr>
<attr name="thickness" format="dimension" />
</declare-styleable>
</resources>
但是,这不会工作,因为所有的属性显然是在同一个命名空间,我得到的错误Error: Attribute "direction" has already been defined
因此很明显,我必须移动。在<declare-styleable>
这样的外部显然复制属性:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="direction">
<enum name="NE" value="0" />
<enum name="NW" value="1" />
<enum name="SW" value="2" />
<enum name="SE" value="3" />
</attr>
<declare-styleable name="BannerView">
<attr name="thickness" format="dimension" />
</declare-styleable>
</resources>
但是这会带来两个问题:
- 如果这能起作用,
<declare-styleable>
的含义是什么? - 如果我希望属性在不同视图中表现不同,该怎么办?例如,如果
BannerView
的方向只能是up
或down
。
真棒,实际上帮助我以及在应用程序库中定义的attr!所以基本上,如果已经定义了attr,它应该用在declare-styleable中,而不要试图覆盖格式。酷酷酷。 – Redwarp