web-dev-qa-db-fra.com

Verrouiller l'orientation de l'écran (Android)

Duplicate possible:
Comment désactiver le changement d'orientation sous Android?

J'écris une application Android qui utilise des onglets avec des contenus différents (activités). Dans l'une de ces activités, j'aimerais verrouiller l'orientation de l'écran en mode "Paysage", mais dans les autres activités, je veux l'orientation normale (selon le capteur).

Ce que je fais maintenant, c'est que j'appelle

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

lorsque je passe en mode paysage, et

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

quand je reviens aux autres activités. Cependant, cela ne semble pas fonctionner, l'application entière se bloque. Quelle est l'approche normale à ce problème?

143
user573536

Dans le manifeste, vous pouvez définir screenOrientation sur paysage. Cela ressemblerait à quelque chose comme ceci dans le XML:

<activity Android:name="MyActivity"
Android:screenOrientation="landscape"
Android:configChanges="keyboardHidden|orientation|screenSize">
...
</activity>

MyActivity est celui que vous souhaitez conserver en mode paysage.

La ligne Android:configChanges=... empêche l'appel de onResume(), onPause() lors de la rotation de l'écran. Sans cette ligne, la rotation restera telle que vous l'avez demandée mais les appels seront toujours effectués.

Remarque: keyboardHidden et orientation sont obligatoires pour <Android 3.2 (API, niveau 13). Les trois options sont obligatoires, version 3.2 ou ultérieure, et pas uniquement orientation.

238
Kevin Dion

J'avais un problème similaire.

Quand je suis entré

<activity Android:name="MyActivity" Android:screenOrientation="landscape"></activity>

Dans le fichier manifeste, cette activité s’affiche en mode paysage. Cependant, lorsque je suis revenu à des activités précédentes, ils étaient affichés dans le paysage même s'ils étaient configurés en mode portrait. Cependant en ajoutant

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

immédiatement après que la section OnCreate de l’activité cible ait résolu le problème. Donc, j'utilise maintenant les deux méthodes.

57
Alan Cartwright

dans le fichier manifeste Android de votre projet, recherchez la déclaration d'activité de laquelle vous souhaitez corriger l'orientation et ajoutez le morceau de code suivant,

Android:screenOrientation="landscape"

pour l'orientation paysage et pour le portrait ajouter le code suivant,

Android:screenOrientation="portrait"
32
HjK