Utiliser de jolis widgets et de beaux conteneurs

Utiliser de jolis widgets et de beaux conteneurs

Le temps s’écoule comme un fleuve

Les widgets DigitalClock ou AnalogClock permettent d’afficher l’heure sans autoriser les utilisateurs à la modifier. Il suffit simplement de les placer dans votre layout et de les laisser travailler. Le fichier main.xml du projet Fancy/Clocks contient ces deux widgets : 112 L’art du développement Android android:layout_width= »fill_parent » android:layout_height= »fill_parent » > Sans avoir besoin de modifier quoi que ce soit au squelette de code Java produit par android create project, on obtient l’application présentée à la Figure 10.4. Mesurer la progression Si une opération doit durer un certain temps, vos utilisateurs doivent pouvoir : ● utiliser un thread en arrière-plan (voir Chapitre 15) ; ● être tenus au courant de la progression de l’opération, sous peine de penser que l’activité a un problème. Figure 10.4 L’application ClocksDemo. Livre Android.book Page 112 Dimanche, 8. novembre 2009 12:23 12 customer 27921 at Fri Mar 11 19:19:45 +0100 2011 Propriété de Albiri Sigue Chapitre 10 Utiliser de jolis widgets et de beaux conteneurs 113 L’approche classique pour tenir les utilisateurs informés d’une progression consiste à utiliser une barre de progression ou un « disque tournant » (pensez à l’animation qui apparaît en haut à droite de la plupart des navigateurs web). Android dispose pour cela du widget ProgressBar. Une ProgressBar mémorise la progression, définie par un entier allant de 0 (aucune progression) à une valeur maximale définie par setMax() qui indique que l’opération s’est terminée. Par défaut, une barre de progression part de la valeur 0, mais vous pouvez choisir une autre valeur de départ via un appel à sa méthode setProgress(). Si vous préférez que la barre soit indéterminée, passez la valeur true à sa méthode setIndeterminate(). Dans le code Java, vous pouvez fixer le montant de progression effectuée (via setProgress()) ou incrémenter la progression courante d’une valeur déterminée (via incrementProgressBy()). La méthode getProgress(), quant à elle, permet de connaître la progression déjà effectuée. Le widget ProgressBar étant intimement lié à l’utilisation des threads – un thread en arrière-plan effectue le traitement et informe de sa progression le thread qui gère l’interface –, nous préférons reporter la démonstration de ce widget jusqu’au Chapitre.

Utilisation d’onglets

La philosophie générale d’Android consiste à faire en sorte que les activités soient courtes et agréables. Lorsqu’il y a plus d’informations que ne peut raisonnablement en contenir l’écran (bien que l’on puisse utiliser des barres de défilement), il peut être préférable de produire ces informations supplémentaires par une autre activité, lancée via une Intent, comme on l’explique au Chapitre 24. Cependant, ceci peut être assez compliqué à mettre en place. En outre, il arrive parfois que l’on doive recueillir et traiter beaucoup d’informations en une seule opération. Dans une interface graphique classique, nous pourrions utiliser des onglets à cette fin, comme un JTabbedPane en Java/Swing. Avec Android, on dispose désormais d’un conteneur TabHost qui fonctionne exactement de la même façon – une portion de ce qu’affiche l’activité est liée à des onglets qui, lorsqu’on clique dessus, permettent de passer d’une partie de la vue à une autre. Une activité utilisera par exemple un onglet pour la saisie d’un emplacement et un autre pour afficher cet emplacement sur une carte. Certains kits de développement considèrent simplement les onglets comme des objets cliquables, permettant de passer d’une vue à l’autre. D’autres les considèrent comme une combinaison de l’élément cliquable et du contenu qui apparaît lorsqu’on clique dessus. Avec Android, les boutons et les contenus des onglets étant des entités distinctes, nous emploierons les termes « bouton de l’onglet » et « contenu de l’onglet » dans cette section. Livre Android.book Page 113 Dimanche, 8. novembre 2009 12:23 12 customer 27921 at Fri Mar 11 19:19:45 +0100 2011 Propriété de Albiri Sigue 114 L’art du développement Android Composants Pour mettre en place les onglets dans une vue, vous avez besoin des widgets et des conteneurs suivants : ● TabHost est le conteneur général pour les boutons et les contenus des onglets. ● TabWidget implémente la ligne des boutons des onglets, qui contient les labels et, éventuellement, des icônes. ● FrameLayout est le conteneur des contenus des onglets : chaque contenu d’onglet est un fils du FrameLayout. Cette approche ressemble à celle de XUL, utilisée par Mozilla : les éléments tabbox, tabs et tabpanels de XUL correspondent respectivement à TabHost, TabWidget et FrameLayout. Idiosyncrasies La version actuelle d’Android exige de respecter les règles suivantes pour que ces trois composants puissent fonctionner de concert : ● L’identifiant android:id du TabWidget doit être @android:id/tabs. ● Vous devez réserver un espace de remplissage dans le FrameLayout pour les boutons des onglets. ● Si vous souhaitez utiliser TabActivity, l’identifiant android:id du TabHost doit être @android:id/tabhost. TabActivity, comme ListActivity, enveloppe un motif d’interface graphique classique (une activité composée entièrement d’onglets) dans une sous-classe d’activité. Vous n’en avez pas nécessairement besoin – une activité classique peut très bien utiliser également des onglets. Pour une raison que j’ignore, TabWidget ne semble pas allouer son espace dans le conteneur TabHost ; en d’autres termes, quelle que soit la valeur de la propriété android:layout_height de TabWidget, FrameLayout l’ignore et le place au-dessus du TabHost, provoquant ainsi le masquage des boutons des onglets par leurs contenus. Par conséquent, vous devez réserver assez d’espace dans FrameLayout (avec android:paddingTop) pour « pousser » le contenu des onglets en dessous des boutons. En outre, TabWidget semble toujours se dessiner en laissant de la place pour des icônes, même si l’on n’en utilise pas. Avec cette version du kit de développement, vous devez donc réserver au moins 62 pixels ou éventuellement plus en fonction des icônes que vous utilisez. Voici le fichier de description d’une activité utilisant des onglets, tiré du projet Fancy/Tab : Chapitre 10 Utiliser de jolis widgets et de beaux conteneurs 115 android:layout_height= »fill_parent »> Vous remarquerez que les éléments TabWidget et FrameLayout sont des fils directs de TabHost et que l’élément FrameLayout a lui-même un fils représentant les différents onglets. Ici, il y en a deux : une horloge et un bouton. Dans un scénario plus compliqué, les onglets seraient regroupés dans un conteneur (un LinearLayout, par exemple) avec leurs propres contenus. 

Formation et coursTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *