El proyecto de la biblioteca de Android utiliza declare-styleable – cómo compilar?

Tengo un control de preferencias personalizado que he definido algunos atributos para en valores / attrs.xml. Sólo para enfocar la conversación, he aquí un ejemplo de atributos que se pueden encontrar en valores / attrs.xml:

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyCustomView"> <attr name="android:text"/> <attr name="android:textColor"/> <attr name="extraInformation" format="string" /> </declare-styleable> </resources> 

Para utilizar los atributos, se utiliza una etiqueta xmlns en la que desea utilizarla y se ve algo así:

 xmlns:custom="http://schemas.android.com/apk/res/com.conundrum.app.lib" 

Aquí radica el problema: la definición de xmlns se refiere al nombre del paquete de la BIBLIOTECA, y este recurso se compila bien en el proyecto LIBRARY. Sin embargo, el proyecto de Android que incluye el proyecto Biblioteca tiene un nombre de paquete diferente y Android intenta combinar todos los recursos. Cuando llega a esta definición xmlns, se opone porque el nombre del paquete es diferente en el proyecto incluido de Android.

¿Alguien tiene alguna idea para usar referencias de xmlns en proyectos de biblioteca que siguen siendo válidos para incluir proyectos de Android?

¿Fueron declarar-styleables apenas una supervisión por el equipo de Androide cuando consideraron bibliotecas?

Utilice http://schemas.android.com/apk/res-auto

Encontré esta solución dada casualmente como una nota secundaria en el proyecto AndroidSVG :

Aparte: Anote la URL del esquema especial en el espacio de nombres. Si utilizaba una vista personalizada de su propio proyecto, utilizaría una URL basada en el nombre de su paquete. Por ejemplo http://schemas.android.com/apk/res/com.example.customview . Pero como la vista personalizada está en una biblioteca incluida, debe utilizar el res-auto-atajo. La URL del esquema real se insertará automáticamente cuando se cree la aplicación.

(He arreglado un error tipográfico – falta / res / subcarpeta – en el texto citado arriba)

En realidad he jugado mucho con estilo y bibliotecas y tengo las siguientes observaciones:

Imagine que tiene un proyecto que tiene proyecto principal e incluye biblioteca:

 main |--- library 
  • No hay ningún problema con la compilación de una aplicación con la biblioteca incluida incluso cuando la biblioteca contiene styleable. Por ejemplo, puede incluir una de mis bibliotecas ( http://code.google.com/p/tree-view-list-android/ ). Usted encontrará una serie de atributos de estilo allí (como plegable) y algunos XML que lo utilizan dentro de la biblioteca .. Todo se compila y funciona bien si se compila la biblioteca solo o como biblioteca incluida … Así que aquí se ve bien …..
  • Ahora, puede experimentar problemas extraños con la compilación del proyecto principal cuando tiene recursos con el mismo nombre tanto en la biblioteca como en el proyecto principal. Al principio no lo entendí, pero ahora sé cómo funciona. Por ejemplo, si tienes en tu biblioteca main.xml que tiene android: id = "@ + id / some_id" y luego en tu proyecto principal tienes otro main.xml (sin alguna id id), entonces el R.id.some_id Se generará al compilar la biblioteca, pero NO se generará en el proyecto principal – esto podría conducir a errores de compilación del proyecto principal porque los archivos incluidos en la biblioteca .java probablemente utilizarán R.id.some_id (que faltará). Inicialmente mal entendido el problema y trató de obtener id de forma dinámica, pero no era necesario al final – era suficiente para asegurarse de que su xmls de diseño en la biblioteca utilizar algún tipo de espacio de nombres privateish.
  • Y ahora la parte más interesante – cómo hacer referencia a los parámetros de estilo en layout.xmls del proyecto? Como notó, lo siguiente no funcionará: xmlns:custom="http://schemas.android.com/apk/res/YOUR_LIBRARY_PACKAGE" Sorprendentemente lo que funciona es xmlns:custom="http://schemas.android.com/apk/res/YOUR_MAIN_APP_PACKAGE" (!) De hecho, parece una pasar por alto el equipo de android, pero una vez que lo sabes, funciona perfectamente.

Este es un problema conocido en Android. Se espera una corrección en la próxima versión (r13) de las herramientas de desarrollo.

Yo también tenía el mismo problema. Mi aplicación no detectó el xml de estilo biblioteca-proyecto.

He intentado esto:

Mi paquete de proyecto de la biblioteca: com.lib.mylibrary Mi paquete de proyecto de la aplicación: com.app.myapp

He intentado xmlns:custom="http://schemas.android.com/apk/res/com.app.myapp

En lugar de xmlns:custom="http://schemas.android.com/apk/res/com.lib.mylib

Funcionó bien, es decir. tratar

 xmlns:custom="http://schemas.android.com/apk/res/<your app package> 

en lugar de

 xmlns:custom="http://schemas.android.com/apk/res/<your lib project package> 

Tengo esta idea aquí

Tal vez un poco tarde, pero el problema parece estar arreglado en la última versión (r14) de las herramientas de desarrollo.

Esto me lo arregló. También recuerdo tener este problema con Xamarin y la misma solución funcionó para Xamarin.

Xmlns: ab = "http://schemas.android.com/apk/res-auto&quot;

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