Supongamos que estoy haciendo algunas vistas nuevas con atributos de estilo. Me declararlos thusly (esto es how the documentation says to do it:¿Cuál es el punto de declarar estilo?
<?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>
Sin embargo, esto no funcionará porque todos los atributos son aparentemente en el mismo espacio de nombres, y me sale el error Error: Attribute "direction" has already been defined
Así que al parecer tengo que mover. los atributos aparentemente duplicados fuera del <declare-styleable>
así:
<?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>
Pero esto plantea dos cuestiones:
- Si esto funciona, ¿cuál es exactamente el punto de
<declare-styleable>
? - ¿Qué sucede si deseo que el atributo se comporte de manera diferente en diferentes vistas? Por ejemplo, si la dirección
BannerView
solo puede serup
odown
.
¡Increíble, en realidad me ayudó también para attr definido en la aplicación-compat lib! Entonces, básicamente, si un attr ya está definido, debe usarse en declare-styleable, sin intentar anular el formato. Cool cool cool – Redwarp