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
Respuesta
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
.
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.
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". –
Bueno, eso es una mierda, puedo ver que es una característica muy bonita. – CaseyB
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.
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
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
- 1. Ejecución del código de tiempo en Android
- 2. Android - Cambiar diseño de fragmento en tiempo de ejecución
- 3. obtener la altura y el ancho del diseño en tiempo de ejecución android
- 4. ¿Es posible cambiar el ancho y la altura del diseño en Android en tiempo de ejecución?
- 5. Diseño de Android reemplazando una vista con otra vista en tiempo de ejecución
- 6. ¿Cómo agregar un control de botón a una vista xml de Android en tiempo de ejecución?
- 7. Cargando XAML XML a través del tiempo de ejecución?
- 8. Android - Uso SurfaceView costumbre en XML diseño
- 9. Atributo Android de diseño XML android: layout_toLeftOf
- 10. ¿Puedo configurar "android: layout_below" en tiempo de ejecución, programáticamente?
- 11. Android: ¿Cómo incluir dinámicamente un diseño XML?
- 12. ¿Cómo comprobar si estoy en tiempo de ejecución o diseño?
- 13. ¿Cómo puedo generar recursos XML en tiempo de ejecución en Android?
- 14. Cambiando los colores de fondo del degradado en Android en tiempo de ejecución
- 15. Android: escalar un grupo de vistas (diseño) en el tiempo de ejecución
- 16. Cambio de menú en tiempo de ejecución
- 17. ¿En el tiempo de diseño, el paquete uri es válido, pero no en tiempo de ejecución?
- 18. Android: cambiar el color de forma en tiempo de ejecución
- 19. Tiempo de ejecución del programa
- 20. quitar declaración XML del documento XML generado usando java
- 21. Problemas con los paquetes de tiempo de ejecución y tiempo de diseño en Delphi
- 22. cambio y aplicar tema en tiempo de ejecución en Android
- 23. ¿Cómo obtener NHibernate SQL generado en código en tiempo de ejecución?
- 24. Campo duplicado en XML generado utilizando JAXB
- 25. Detecta aceleración de hardware en tiempo de ejecución: Android
- 26. android: calidad de las imágenes redimensionadas en tiempo de ejecución
- 27. sugerencia de diseño: llvm contextos de tiempo de ejecución múltiples
- 28. Crear XmlRpcUrl interfaz en tiempo de ejecución
- 29. Validar XML con esquemas de carga en tiempo de ejecución, falla según el orden del esquema
- 30. Android cómo crear una miniatura en tiempo de ejecución
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