Desarrollo de widgets en Android: bases, limitaciones, layouts y configuración

Introducidos en Android 1.5, los widgets son un tipo especial de app que aparece en la pantalla de inicio junto a accesos directos. Su layout se escribe en XML, pero sus funciones (qué hacer al actualizarse, al crearse, etc.) son métodos Java, heredados y sobrescritos de la interfaz AppWidgetProvider.

Bases del widget

Para crear un widget funcional que el usuario pueda añadir a la pantalla de inicio, debes crear una nueva clase que herede de AppWidgetProvider. Esta clase contiene métodos para recibir intents específicos de widget (ej. cerrar o actualizar). Un widget debe tener también un archivo XML de metadatos que informe al SO Android sobre sus propiedades: dimensiones mínimas, frecuencia de actualización, layout y otros datos necesarios.

Limitaciones

Los widgets en smartphones tienen tamaño limitado y solo pueden actualizarse con cierta frecuencia. En Android < 3.1, reemplazan iconos en la pantalla de inicio y no son redimensionables: al especificar tamaño mínimo, se estira para cubrir los huecos necesarios. En versiones posteriores, son redimensionables: esas variables son el "default" y nuevas variables (minResizeWidth, minResizeHeight) definen el tamaño mínimo real. Además, todos los widgets tienen frecuencia mínima de actualización: si especificas una menor, Android la ignora y usa la suya (ej. 30 min en v1.5).

Layouts de widgets

Los widgets deben funcionar en móviles con distintas resoluciones. LinearLayout es simple y encaja en cualquier pantalla; ordena componentes izquierda-derecha o arriba-abajo según atributo "android:orientation". FrameLayout y RelativeLayout también son compatibles. Los widgets pueden anidar layouts. Android 4.0+ aplica márgenes automáticos si targetSdkVersion es 14+; los desarrolladores recomiendan no añadir márgenes extra fuera de la forma de fondo del widget para esta plataforma.

Configuración del widget

Algunos widgets solo muestran info y no son personalizables. Otros ofrecen configuración. Para implementarla, crea una clase que extienda Activity y define el layout con XML. Tu clase de configuración debe acceder a los componentes de tu clase de layout para que el widget reconozca las acciones del usuario y se actualice. AndroidManifest.xml registra las activities implementadas.