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 un Bundle afin de pouvoir récupérer l’état de votre activité.
Cette récupération est possible, car dans le onCreate, la méthode onRestoreInstanceState() 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éthode onRetainNonConfigurationInstance() 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 :

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.

Categories: Tutoriels

7 Responses so far.


  1. Eric dit :

    bonjour,
    chez moi tout va bien puisque j’ai utilisé les techniques citées plus haut. Un merci à l’auteur. J’ai cependant un souci en effet pour tout mes buttons tout se passe dans tous les modes mais pour un d’eux tout s’arrête dès que je tourne la tablette. Je ne sais plus que faire et toute idée sera la bienvenue.
    Merci! Eric

  2. Mike dit :

    Mouais… mais je pense que certains exemple n’aurait pas fait de mal. ^^

    Par exemple, j’ai fait une application dans laquelle j’ai un SlidingDrawer, quand on l’ouvre en mode portrait puis qu’on bascule en landscape => hop ! Le drawer s’est instantanément refermé.
    Et inversement (landscape => portrait)

    Saurais-tu comment faire pour qu’il conserve sa position ? :)

  3. Mike dit :

    L’apprentissage par l’exemple est ce qu’il y a de mieux, c’est dommage que tu ne donnes pas quelques bouts de code agrémentés de quelques commentaires… :)

    • Benbourahla Nazim dit :

      Oui j’utilise l’apprentissage par exemples dans tous mes autres tutos, mais le but de celui la est d’expliquer juste comment gérer la rotation et qu’elles sont les bests practices car le code en soit n’est pas dur, il suffit d’utiliser les méthodes et attributs xml cités dans le tutos

      • Les Inconnus dit :

        Rappel toi de la devise de la maison :

        “Il ne faut pas prendre les gens pour des cons, mais il ne faut pas oublier qu’ils le sont”

        Mieux vaut trop que pas assez, et un truc simple pour l’un, ne l’est pas forcément un autre.

        Toutefois, merci pour tout tes tutos.

Leave a Reply


Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.