スタイリング可能な属性を使用して新しいビューを作成しているとします。私はそれらをこのように宣言します(これはドキュメントがそれを行うように言っている方法です:
<?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>
しかし、これには2つの疑問があります。
- これが機能する場合、正確には何のポイント
<declare-styleable>
ですか? - 異なるビューで属性の動作を変えたい場合はどうすればよいですか?たとえば、
BannerView
の方向がup
またはのみである場合down
。