Tutoriel Android Partie 11 – Les TabHost

Les TabHost

Vous avez sûrement dû rencontrer des applications qui avaient une interface sous forme d’onglets. Vous vous demandez peut-être comment fait t’on pour faire ceci sur Android et je l’avoue ce n’est pas facile.

and-11-01

Voici un exemple concret de l’utilisation des onglets sous Android, cela permet d’agencer l’interface facilement si l’utilisateur a besoin d’accéder à des données rapidement.

Notre petit système d’exploitation nous permet de réaliser ceci grâce a un type d’activité bien spéciale : les TabActivity ; vous allez me dire c’est évident, mais le rappeler ne fait de mal à personne.

Il faut savoir qu’une application utilisant des TabHost utilise plusieurs activités, où chaque onglet est une activité différente ou la même mais avec un contenu différent.

and-11-02

En gros, on remarque que l’activité principale héberge un tabhost qui lui-même hébergera une ou plusieurs autres activités, il faut bien mettre cette notion dans la tête.

Création d’un TabHost

Commençons par créer un nouveau projet et changeons l’héritage de notre activité principale en TabActivity.

public class MonActivite extends TabActivity

Puis, nous allons nous tourner vers notre fichier main.xml qui sera là pour definer le layout de l’application :

On voit bien que notre élément de base est le TabHost qui a pour id « @android :id/tabhost », c’est très important sinon la TabActivity ne pourra pas s’y retrouver. Ensuite, un LinearLayout basic, puis un TabWidget qui contient l’id « android :id/tabs », tout aussi important et pour terminer un FrameLayout avec pour id « android :id/tabcontent ». C’est une base obligatoire pour faire fonctionner correctement notre application, oubliez un morceau et vous aurez une jolie erreur.

Nous allons rajouter une activité à notre projet que l’on nommera ActiviteTab. Elle sera utilisée pour afficher les informations dans les onglets, mais vous pouvez très bien utiliser plusieurs activités (une pour chaque onglet).

Puis, nous allons créer un nouveau Layout pour cette activité, je le nommerais tab.xml:

Voici un layout simple avec uniquement un TextView centré dans la vue.

Nous allons modifier notre activité en conséquence, celle-ci recevra aussi un Intent de l’application principale avec la chaîne de caractères à afficher dans notre Activite.

Retournons désormais sur notre activité principale qui sera au cœur de notre application.

Nous allons commencer par déclarer un TabHost et un TabSpec, le TabHost servira de lien entre l’IHM et notre code. De plus, il sera le conteneur des différents onglets, quand au TabSpec il sera là pour spécifier les informations de l’onglet (l’activité vers laquelle il pointe, se nom et son image).

Déclarons maintenant notre Intent qui sera utilisé pour lancer les activités enfants :

Ensuite, nous récupèrons le tabhost

Voilà nous avons créé une bonne partie de notre application, la suite nous permettra d’ajouter un onglet à notre TabHost.

Création des onglets

Voyons comment rajouter des onglets à notre TabHost facilement.

Tout d’abord, votre TabHost dispose d’une méthode newTabSpec qui permet de définir un nouvel onglet. Il prend en paramètre un tag, ce tag doit être unique et sous forme d’une chaîne de caractères.

Nous allons aussi rajouter un indicateur à cet onglet, nous pouvons lui définir un titre et une image, l’image n’étant pas obligatoire.

Et pour finir, lui définir l’intent qu’il va exécuter lors de la création de l’onglet.

Puis, il faut ajouter l’onglet à notre tabHost comme ceci :

Voilà rien de bien compliqué, nous savons ajouter un onglet au TabHost et lui définir une activité.

Je vous mets le code complet de notre activité :

J’ai ajouté un autre onglet pour bien montrer ce qui se passe.

Permissions

Il ne faut surtout pas oublier de déclarer l’activité dans l’AndroidManifest, sinon nous aurons un jolie FC.

De plus, nous allons definer un thème à notre activité principale pour que l’on n’affiche pas la barre de titre de notre application.

@android:style/Theme.NoTitleBar est un thème par défaut contenu dans Android.

Conclusion

Vous devez normalement obtenir ce résultat :

and-11-03 and-11-04

Les TabHost ne sont pas insurmontables, elles ont juste une façon de fonctionner un petit peu spéciale.
J’espère que ce tutoriel vous aura plus et que vous ferez de jolies applications ! (Y’a intérêt)

Sources de la formation