Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cuál es el punto de declarar-estilo?

Supongamos que estoy haciendo algunas nuevas vistas con atributos elegibles. Les declaro así (así es como dice la documentación para hacerlo :

<?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 están aparentemente en el mismo espacio de nombres, y obtengo el error Error: Attribute "direction" has already been defined .

Así que aparentemente tengo que mover los atributos aparentemente duplicados fuera de la <declare-styleable> como esto:

 <?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 preguntas:

  1. Si esto funciona, ¿cuál es exactamente el punto de <declare-styleable> ?
  2. ¿Qué pasa si quiero que el atributo se comporte de manera diferente en diferentes puntos de vista? Por ejemplo, si la dirección de BannerView sólo puede ser up o down .

One Solution collect form web for “¿Cuál es el punto de declarar-estilo?”

¿Cuál es exactamente el punto de <declare-styleable> ?

<declare-stylable> etiquetas <declare-stylable> permiten declarar atributos para sus vistas personalizadas que puede establecer para esas vistas en xml. Hay realmente 3 partes para usar el atributo:

  1. Declare un <attr> dentro de una etiqueta <declare-stylable> .
  2. Defina un espacio de nombres personalizado en su diseño xml que apunte al nombre del paquete de la aplicación (por ejemplo, la app ). Utilice el atributo personalizado en su diseño (por ejemplo, app:direction="NW" ).
  3. En su vista personalizada, reemplace los constructores con un parámetro AttributeSet , obtenga un TypedArray y lea los atributos personalizados, si los hay, de él y luego dentro del constructor le dicen a la vista cómo usar esos atributos apropiadamente.

¿Qué pasa si quiero que el atributo se comporte de manera diferente en diferentes puntos de vista? Por ejemplo, si la dirección de BannerView sólo puede ser hacia arriba o hacia abajo.

Intente algo como esto:

 <?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="TriangleView"> <attr name="direction" /> </declare-styleable> <declare-styleable name="BannerView"> <attr name="direction" /> <attr name="thickness" format="dimension" /> </declare-styleable> </resources> 

Cuando crea su diseño xml para TriangleView o BannerView , puede utilizar el ejemplo app:direction="NW" para ambos. En los constructores con AttributeSet en TriangleView o BannerView , los atributos tendrán el mismo formato que el original, pero lo que hagas con ese valor depende de la implementación de los constructores en cada vista respectiva (puede ser igual o diferente para ambos) .

Si desea que los atributos se definan de forma diferente (es decir, diferente "formato" o "enum") para diferentes vistas, entonces usted tiene que crear diferentes atributos con diferentes nombres.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.