Je me suis amusé à réaliser un simple widget pour Androïd. J’ai consulté un peu de documentation en ligne, d’exemples et honnêtement ce n’est pas cela qui manque.

L’objectif de ce premier programme était de comprendre comment fonctionnent les widgets car leur approche est un peu différente des programmes classiques basés sur les « activities ».

Ce premier widget rend un service très simple, il affiche la place disponible sur votre carte SD et la mémoire interne. Tout cela accessible sur le bureau en un seul coup d’oeil.

Dans ce post je ne vais pas décrire comment créer un widget sous Androïd, les exemples sont nombreux sur la toile. Je vais plutôt décrire la résolution d’un point m’ayant posé problème :

  • la customisation des barres de progression horizontales.

En effet, par défaut les barres de progression horizontales offrent assez peut de paramètres : elles sont larges et jaunes sur fond gris. Souhaitant afficher une barre verte sur fond rouge, dans un espace minuscule (48 pixels sur 48 pixels), j’ai été contraint de dépasser les paramètres de base.

Pour ce faire, après quelques recherches, il faut récupérer le fichier natif décrivant les barres de progression horizontales, le modifier et l’intégrer au projet.

Récupérer le fichier natif

Pour récupérer ce fichier il faut simplement fouiller dans la sdk Androïd. Chercher et récupérer le fichiers :

  • progress_horizontal.xml

Le copier dans le répertoire res/drawable de votre projet.

Le modifier

Editer le contenu du fichier pour modifier les valeurs des balises gradient suivantes :

  • @android:id/background
  • @android:id/secondaryProgress (si vous avez besoin d’afficher une deuxième zone de progression dans la même barre, à la manière d’un tampon de chargement dans un logiciel de visualisation de vidéo par exemple).
  • @android:id/progress

L’intégrer au projet

Il suffit maintenant de déclarer dans notre fichier de layout que nous utilisons ce fichier là pour nos barres de progression (attribut android:progressDrawable= »@drawable/progress_horizontal ») :

<ProgressBar android:id="@+id/progressBar1" style="?android:progressBarStyleHorizontal" android:minHeight="14dip" android:gravity="center_horizontal|center_vertical" android:progressDrawable="@drawable/progress_horizontal" android:maxHeight="14dip"</ProgressBar>

Changer l’épaisseur

L’épaisseur se change avec les attributs xml suivants, exprimés en dip (Density-independent Pixels), voir cet excellent post résumant les unités de mesure sur Androïd :

  • android:maxHeight
  • android:minHeight

Et voilà, ce n’est pas bien compliqué mais cela illustre une façon de modifier le comportement natif des éléments d’interface sous Androïd.