Supponiamo che sto facendo alcune nuove viste con attributi stilizzabili. Dichiaro di loro questa convenzione (questo è how the documentation says to do it:Qual è il punto di dichiarare-stilizzabile?
<?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>
Tuttavia, questo non funziona perché tutti gli attributi sono apparentemente nello stesso namespace, ed ottengo l'errore Error: Attribute "direction" has already been defined
Quindi a quanto pare devo muovere. gli attributi apparentemente duplicati di fuori del <declare-styleable>
in questo modo:
<?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>
Ma questo pone due domande:
- Se funziona, qual è esattamente il punto di
<declare-styleable>
? - Cosa fare se si desidera che l'attributo si comporti in modo diverso nelle diverse visualizzazioni? Ad esempio se la direzione di
BannerView
può essere soloup
odown
.
Impressionante, in realtà mi ha aiutato anche per attr definito nell'app-compat lib! Quindi è fondamentalmente, se un attr è già definito, dovrebbe essere usato in declare-styleable, senza provare a sovrascrivere il formato. Cool cool cool. – Redwarp