2009-12-21 15 views
11

Actualmente estoy trabajando en un proyecto que requiere que use un documento XML para representar un formulario en un dispositivo Android. El formulario debe buscarse y mostrarse en tiempo de ejecución. Me pregunto si hay una forma de etiquetar el formulario XML, transformarlo usando XSLT en un diseño de Android XML y luego hacer que el dispositivo lo represente.Creación/uso del diseño generado en tiempo de ejecución XML en Android

+1

Solo ten cuidado. Android hace mucho trabajo para optimizar la lectura y el análisis de esos archivos en tiempo de ejecución. Entonces, si haces la tuya propia, prepárate para que se infle MUCHO más lento. – haseman

Respuesta

6

Android solo contiene una forma incorporada de "inflar" el diseño XML almacenado como recurso de diseño en el archivo APK. Si desea "inflar" XML similar (o diferente) de otras fuentes, tendrá que implementarlo usted mismo, tal vez clonando alguna lógica de la clase LayoutInflater.

0

El método LayoutInflater.inflate tomará un XmlPullParser como argumento, así que todo lo que tiene que hacer es cargar su XML creado dinámicamente en un PullParser y pasarlo al inflater.

+6

Pero si realmente lee la documentación para ese método dice "actualmente no es posible usar LayoutInflater con XmlPullParser sobre un archivo XML simple en tiempo de ejecución". –

+0

Bueno, eso es una mierda, puedo ver que es una característica muy bonita. – CaseyB

12

Desafortunadamente, no se puede clonar LayoutInflater o utilizar otros trucos para hacer esto: la inflación del diseño depende completamente de los constructores de vista que toman un argumento AttributeSet, que dependen completamente del método Context.obtainStyledAttributes, que a su vez es completamente dependiente de tener un archivo XML binario preprocesado para poder hacer una resolución de atributos razonablemente eficiente.

Un enfoque alternativo que puede explorar es usar la herramienta aapt (o más bien una versión pirateada) en su servidor, para compilar los diseños que genera en los datos apropiados. Desafortunadamente, actualmente no tenemos una forma de construir un XmlPullParser desde un blob binario sin procesar (debe obtener este blob del AssetManager), por lo que hay mucho trabajo por hacer tanto en el cliente como en el servidor con este enfoque. Sospecho que uno puede inventar algo bastante limpio, pero será mucho trabajo.

+0

Considerando esto es algo que necesita ser prototipo durante la próxima semana y media, estoy pensando que este no es un enfoque que debería investigar hasta una fecha posterior. ¿Estarías de acuerdo con esto? He hecho construcciones de UI desde XML en tiempo de ejecución para plataformas de escritorio y web. También tenemos una implementación para esto para una aplicación Windows Mobile. Tal vez tenga que imitar esos enfoques e investigar más tarde cuando tenga más tiempo o cuando surjan problemas de rendimiento. – illvm

+0

Sí, este no es un proyecto de una semana. :) La ruta más fácil sería simplemente hacer una estructura XML simple que defina lo que necesita para sus diseños, sin tratar de permitir todo lo que un diseño de Android puede hacer. Analizar eso y convertirlo en la construcción del diseño de View debería ser bastante simple; puede agregar nuevas instalaciones a su formato XML según sea necesario. – hackbod

Cuestiones relacionadas