android widget

Estilos de widgets personalizados de Android: ¿cómo colocarlos en un espacio de nombres?



(4)

En el ApiDemos, hay un ejemplo de vista llamado Gallery1 que declara un estilo personalizado en attrs.xml, como tal:

<declare-styleable name="Gallery1"> <attr name="android:galleryItemBackground" /> </declare-styleable>

ahora, quiero hacer lo mismo con mis widgets, pero usando un espacio de nombres diferente. Sin embargo, tan pronto como sustituyo android: namespace con otra cosa, recibo este error:

ERROR: En Gallery1, no se pueden encontrar los atributos de atributo: galleryItemBackground

¿No se puede encontrar el atributo? ¿Por qué busca un atributo que estoy por declarar? ¿No es el objetivo de este archivo poder nombrar sus propios atributos personalizados?

Es interesante observar que funciona si no proporciona un espacio de nombres personalizado, sino solo un nombre de atributo.


En caso de que alguien todavía esté interesado, tuve el mismo problema y lo resolví agregando un atributo de ''formato'' (parece que no toma la ''cadena'' como valor predeterminado):

<attr name="android:galleryItemBackground" format="integer"/>


He encontrado this artículo útil en una situación similar.

"Hacer referencia a nuestros nuevos atributos es en realidad un proceso de dos pasos. Primero, declaramos un nuevo espacio de nombres y luego especificamos los valores de nuestros nuevos atributos en el uso de XML".


Tuve un problema similar que resultó en el mensaje de error No se encontró un identificador de recurso para el atributo en el paquete

La solución para mí fue declarar el espacio de nombres cuando usas el atributo personalizado.

En su archivo xml donde usa su atributo personalizado especifique:

xmlns:myns="http://schemas.android.com/apk/res-auto"

...

<gallery.widget.package.Gallery1 myns:myCustomAttr="xxx" />


cree un archivo xml y pegue el siguiente código y colóquelo en la carpeta res-> valores

<declare-styleable name="Gallery1"> <attr name="android:galleryItemBackground" /> </declare-styleable>

y luego copiar el siguiente código

TypedArray typedArray=this.obtainStyledAttributes(R.styleable.Gallery1); int back=typedArray.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); typedArray.recycle();

y puesto en su fondo de widget me refiero a imageView.setBackgroundResource(back);