Philosophie de la rotation
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
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
Sauvegarde de l’état
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
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
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 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
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 ; |