假设我正在制作一些带有样式属性的新视图。我因此声明它们(这就是文档所说的这样做:
<?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>
? - 如果我希望属性在不同视图中表现不同怎么办?例如 if
BannerView
的方向只能是up
ordown
。