Widgets en Android En esta primera parte vamos a crear un widget muy bsico, consistente en un simple marco rectangular negro con un mensaje de texto predeterminado (Mi Primer Widget). La sencillez del ejemplo nos permitir centrarnos en sencillez del ejemplo nos permitir centrarnos en los pasos principales de la construccin de un widget Android y olvidarnos de otros detalles que nada tienen que ver con el tema que nos ocupa (grficos, datos, etc). Widgets en Android Widgets en Android Los pasos principales para la creacin de un widget Android son los siguientes: Definicin de su interfaz grfica (layout). Configuracin XML del widget (AppWidgetProviderInfo). (AppWidgetProviderInfo). Implementacin de la funcionalidad del widget (AppWidgetProvider) , especialmente su evento de actualizacin. Declaracin del widget en el Android Manifest de la aplicacin. 1.- Definicin de su interfaz grfica (layout) En esta ocasin, la interfaz del widget estar compuesta nicamente por un par de frames (FrameLayout), uno negro exterior y uno blanco interior algo ms pequeo para simular el marco, y una etiqueta de texto simular el marco, y una etiqueta de texto (TextView) que albergar el mensaje a mostrar. Veamos cmo queda el layout xml, que para este ejemplo llamaremos miwidget.xml: 1.- Definicin de su interfaz grfica (layout) 1.- Definicin de su interfaz grfica (layout) Cabe destacar aqu que, debido a que el layout de los widgets de Android est basado en un tipo especial de componentes llamados RemoteViews, no es posible utilizar en su interfaz todos los contenedores y en su interfaz todos los contenedores y controles que hemos visto en artculos anteriores sino slo unos pocos bsicos que se indican a continuacin: 1.- Definicin de su interfaz grfica (layout) Contenedores: FrameLayout, LinearLayout, RelativeLayout y GridLayout (ste ltimo a partir de Android 4). Controles: Button, ImageButton, ImageView, TextView, ProgressBar,Chronometer, AnalogCl TextView, ProgressBar,Chronometer, AnalogCl ock y ViewFlipper. A partir de Android 3 tambin podemos utilizar ListView, GridView, StackView y AdapterViewFlipper, aunque su uso tiene algunas particularidades. En este artculo no trataremos este ltimo caso, pero si necesitas informacin puedes empezar por la documentacin oficial sobre el tema. 2.- Configuracin XML del widget Como segundo paso del proceso de construccin vamos a crear un nuevo fichero XML donde definiremos un conjunto de propiedades del widget, como por ejemplo su tamao en pantalla o su frecuencia de tamao en pantalla o su frecuencia de actualizacin. Este XML se deber crear en la carpeta \res\xml de nuestro proyecto. En nuestro caso de ejemplo lo llamaremos miwidget_wprovider.xml y tendr la siguiente estructura: 2.- Configuracin XML del widget 2.- Configuracin XML del widget Para nuestro widget estamos definiendo las siguientes propiedades: initialLayout: referencia al layout XML que hemos creado en el paso anterior. minWidth: ancho mnimo del widget en pantalla, minWidth: ancho mnimo del widget en pantalla, en dp (density-independent pixels). minHeight: alto mnimo del widget en pantalla, en dp (density-independent pixels). label: nombre del widget que se mostrar en el men de seleccin de Android. updatePeriodMillis: frecuencia de actualizacin del widget, en milisegundos. 2.- Configuracin XML del widget Existen varias propiedades ms que se pueden definir, por ejemplo el icono de vista previa del widget (android:previewImage, slo para Android >3.0) o el indicativo de si el widget ser redimensionable (android:resizeMode, ser redimensionable (android:resizeMode, slo para Android >3.1) o la actividad de configuracin del widget (android:configure). El resto se pueden consultar en la documentacin oficial de la clase AppWidgetProviderInfo. 3.- Implementacin de la funcionalidad del widget (AppWidgetProvider) Este consiste en implementar la funcionalidad de nuestro widget en su clase java asociada. Esta clase deber heredar de AppWidgetProvider, que a su vez no es ms de AppWidgetProvider, que a su vez no es ms que una clase auxiliar derivada de BroadcastReceiver, ya que los widgets de Android no son ms que un caso particular de este tipo de componentes. 3.- Implementacin de la funcionalidad del widget (AppWidgetProvider) En esta clase deberemos implementar los mensajes a los que vamos a responder desde nuestro widget, entre los que destacan: onEnabled(): lanzado cuando se crea la primera instancia de un widget. instancia de un widget. onUpdate(): lanzado periodicamente cada vez que se debe actualizar un widget, por ejemplo cada vez que se cumple el periodo de tiempo definido por el parmetro updatePeriodMillisantes descrito, o cuando se aade el widget al escritorio. onDeleted(): lanzado cuando se elimina del escritorio una instancia de un widget. onDisabled(): lanzado cuando se elimina del escritorio la ltima instancia de un widget. 3.- Implementacin de la funcionalidad del widget (AppWidgetProvider) En la mayora de los casos, tendremos que implementar como mnimo el evento onUpdate(). El resto de mtodos dependern de la funcionalidad de nuestro dependern de la funcionalidad de nuestro widget. En nuestro caso particular no nos har falta ninguno de ellos ya que el widget que estamos creando no contiene ningn dato actualizable, por lo que crearemos la clase, llamada MiWidget, pero dejaremos vaco por el momento el mtodo onUpdate(). 3.- Implementacin de la funcionalidad del widget (AppWidgetProvider) 4.- Declaracin del widget en el Android Manifest de la aplicacin. El ltimo paso del proceso ser declarar el widget dentro del manifest de nuestra aplicacin. Para ello, editaremos el fichero AndroidManifest.xml para incluir la fichero AndroidManifest.xml para incluir la siguiente declaracin dentro del elemento<application>: 4.- Declaracin del widget en el Android Manifest de la aplicacin. El widget se declarar como un elemento <receiver> y deberemos aportar la siguiente informacin: Atributo name: Referencia a la clase java de nuestro widget, creada en el paso anterior. Elemento <intent-filter>, donde indicaremos los eventos a los que responder nuestro widget, normalmente aadiremos el evento APPWIDGET_UPDATE, para detectar la accin de actualizacin. Elemento <meta-data>, donde haremos referencia con su atributo resource al XML de configuracin que creamos en el segundo paso del proceso.