Diseñador de layouts para Android

Todo programador para Android sabe lo tedioso que resulta implementar un layout con un grado medio de complejidad. Busqué una solución probando los editores suministrados con Eclipse y con la extensión MonoDroid para Visual Studio 2010 y ambos me daban problemas de estabilidad, sobretodo el de VS que fallaba en cuanto intentaba insertar un componente cualquiera. Al final, buscando por la red, descubrí Designer4android, un pequeño programa para crear layouts inicialmente integrado en Basic4android, un compilador cruzado para Android en Visual Basic, pero que la empresa facilita de modo independiente por sólo $19.


El programa permite diseñar en modo WYSIWYG conectándose directamente al dispositivo o al emulador y en la resolución que deseemos. Sólo le encontré un par de pegas:
  • No genera los ficheros xml standard sino ficheros bal que deben ser leidos por una clase Java especialmente diseñada para ello que se incluye al comprarlo. Además dichos ficheros deben colocarse en la carpeta /Assets, no en /Resources/Layout.
  • Los layouts con muchos componentes (más de 10) pueden tener un tiempo de carga apreciable.

Aún así es muy recomendable y puede ahorrarnos mucho tiempo en pruebas.


Como usar los layouts generados por Designer4android con C#

Explico aquí los preparativos para usar los layouts .bal en el entorno C# de MonoDroid corriendo en VS2010.

Necesitamos poder acceder al constructor de la clase Designer4android, a la función LoadLayout y a la interface Anywheresoftware.D4a.IOnLayoutLoadedListener. Al estar la clase codificada en Java debemos primero generar una dll para .Net:
  • Creamos un nuevo proyecto Android - Java Bindings Library.
  • Importamos designer4android_1_01.jar a la carpeta /jars.
  • Modificamos Build Action en Propiedades a InputJar y compilamos.
  • Aparecerán varios warning que pueden ser ignorados. Ya tenemos nuestra librería Designer4android.dll compilada para funcionar en .Net y nos dirigimos a nuestro proyecto.
  • Tomamos el fichero compilado en /bin/Debug (o /Release según se haya compilado) y lo copiamos a la raíz de nuestro proyecto. La propiedad Build Action debe ser AndroidJavaLibrary.
  • Seleccionamos la carpeta Referencias y elegimos Proyecto - Agregar Referencia. En la pestaña Examinar buscamos la dll generada y aceptamos. Ya estamos listos para usar los layouts.

Y en nuestro software:
using Anywheresoftware.D4a;

// Extendemos la actividad con la interface D4a
public class MainClass : Activity, Anywheresoftware.D4a.IOnLayoutLoadedListener;
{
     Designer4android d4a;
     ViewGroup vg;

     protected override void OnCreate(Bundle bundle)
     {
           base.OnCreate(bundle);

// Cargamos nuestro layout con lo que se activa el listener Designer4android
           d4a = new Designer4android("archivo.bal");
           vg = d4a.LoadLayout(this, this);
// Nos olvidamos de SetContentView(Resource.Layout.Main)
     ...}
...
// El listener permite comprobar que el layout se cargó correctamente
// y a continuación cargamos los componentes diseñados con GetView
     void Anywheresoftware.D4a.IOnLayoutLoadedListener.OnLayoutLoaded(Anywheresoftware.D4a.Designer4android ds, bool ok, Java.Lang.Exception e)
        {
            if (!ok)
            {
// Error de carga del archivo .bal                
                Finish();
                return;
            }
// Sino cargamos las vistas del layout
            ImageView image = (ImageView)ds.GetView("ImageViewLogo");
            ListView lista = (ListView)ds.GetView("ListViewActive");
        ...}
...}

Enlaces: Designer4android

No hay comentarios:

Publicar un comentario