【发布时间】:2012-09-23 13:02:03
【问题描述】:
假设我正在制作一些带有样式属性的新视图。我因此声明它们(这是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。
【问题讨论】:
标签: android attr android-custom-view android-resources declare-styleable