jeudi 29 septembre 2011

Gestion de la rotation sous Android

Le but de ce tutoriel est d’expliquer comment gérer la rotation de l’écran dans vos applications Android.


Philosophie de la rotation
Lors d’une rotation de l’écran, Android supprimera et recréera toutes les activités en cours d’exécution ou en pause.
Ce comportement est celui par défaut, vous pouvez adapter la réponse de vos activités aux changements d’orientation.
Finalement c’est aux développeurs de vérifier et corriger l’affichage de votre application dans le mode portrait et landscape.

Création des nouvelles vues

Pour créer vos nouvelles vues qui seront affichées en monde landscape, il suffit de créer un nouveau dossier dans le dossier res. Ce dossier se nommera layout-land.
Vous devez donc repenser votre interface pour que la vue en mode landscape soit agréable à utiliser sans surcharger l’écran.

Tester sur l’émulateur

Pour simuler la rotation de l’écran sur l’émulateur, il faut utiliser le raccourci CTRL + F12.

Sauvegarde de l’état

Comme précisé plus haut, Android détruit votre vue en cas de changement d’orientation pour construire la nouvelle vue. Donc vous voulez peut être sauvegarder des données avant le changement d’orientation, par exemple si l’utilisateur a commencé à saisir du texte.
Pour résoudre ce problème, il suffit d’utiliser la méthode onSaveInstanceState().
Cette méthode est appelée à chaque fois que votre activité est détruite.
Grâce à cette méthode vous pouvez sauvegarder les données que vous souhaitez dans unBundle afin de pouvoir récupérer l’état de votre activité.
Cette récupération est possible, car dans le onCreate, la méthodeonRestoreInstanceState() est appelée afin de récupérer l’état de votre vue, donc dans cette méthode vous pouvez utiliser toutes les valeurs que vous avez stocké dans la méthode précédente.

Limitation

La méthode onSaveInstanceState, possède ses limites car on peut stocker peu d’information dans un Bundle et dans certains cas on aurait besoin de stocker beaucoup plus.
On peut contourner ce problème en utilisant la méthodeonRetainNonConfigurationInstance() qui vous permet de renvoyer un objet que vous pouvez récupérer grâce à la méthode getLastNonConfigurationInstance().

Surcharger la rotation

Dans certains cas, il est indispensable de surcharger le comportement par défaut de la rotation sur votre application.
Pour cela il suffit simplement de :
  • Utiliser l’attribut android:configChanges de l’élément activity dans le fichier AndroidManifest.xml pour citer les modifications de configuration que vous voulez gérer. Il peut prendre les valeurs suivantes :
  • Puis dans votre activité, il vous faut implémenter la méthode onConfigurationChanged() pour gérer les configurations que vous avez cité dans votre manifest.

Bloquer la vue

Pour finir vous pouvez bloquer votre vue dans un mode ou un autre. Cette méthode est déconseillée par Google, car bloquer une vue en portrait réduit significativement l’expérience utilisateur et encore plus pour les tablettes, car pour les tablettes la vue par défaut est landscape et non portrait.
Pour utiliser cette manipulation, il suffit d’ajouter android:screenOrientation=”portrait ou landscape”. Cela permet de verrouiller votre activité dans le sens souhaité.

Best Practice – Gérer les tablettes

Si vous souhaitez gérer la rotation dans tous les cas, pour que votre application s’affiche naturellement pour les utilisateurs de tablette et ceux de téléphone. Vous pouvez utiliser le code suivant :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int x = AXIS_X;
int y = AXIS_Y;
case(Display.getRotation())
    Surface.ROTATION_0: //Ici votre code
break;
    Surface.ROTATION_90: x=AXIS_Y; y = AXIS_MINUS_X;
 //Ici votre code
break;
    Surface.ROTATION_180: y=AXIS_MINUS_Y;
                //Ici votre code
break;
    Surface.ROTATION_270: x=AXIS_MINUS_Y; y = AXIS_X;
 //Ici votre code
break;

Conclusion

Ce tutoriel se fini ici, en espérant qu’il vous a aidé à mieux comprendre comment gérer la rotation dans vos applications.

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free Android website | Bloggerized by wassim El mririe - Ramzi Essid | TO Best Web Host