159 votes

Orientation de l'écran de verrouillage (Android)

J'écris une application Android qui utilise des onglets avec différents contenus (activités). Dans l'une de ces activités, je voudrais 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 à l'activité en mode paysage, et

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

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

23 votes

Le lien "Duplicata possible" est no une question en double de celle-ci. Cette question demande comment verrouiller l'orientation afin qu'il ne puisse pas changer de paysage. La question liée est de savoir comment empêcher le redémarrage des applications lorsque l'orientation change.

0 votes

Cela semble être ce que vous voulez : Appelez Screen.lockOrientation(this) et plus tard Screen.unlockOrientation(this) de github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/

0 votes

Mais attention, si vous utilisez ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT en ligne, cela n'est pas autorisé sous la version 4.3. Vous pouvez alors utiliser les fonctions ci-dessus ou ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT.

257voto

Kevin Dion Points 2061

Dans le manifeste, vous pouvez définir l'orientation de l'écran 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 qui doit rester dans le paysage.

El android:configChanges=... la ligne empêche onResume() , onPause() d'être appelé lorsque l'écran est tourné. Sans cette ligne, la rotation restera telle que vous l'avez demandée mais les appels seront toujours effectués.

Note : keyboardHidden y orientation sont nécessaires pour < Android 3.2 (API niveau 13), et les trois options sont nécessaires 3.2 ou plus, et pas seulement orientation .

0 votes

Cela ne semble pas fonctionner ; est-ce que j'ai raté quelque chose ?

3 votes

Hmm oui, vous avez raison, cela ne semble pas fonctionner si l'activité est exécutée à l'intérieur d'un TabHost. Je pense que vous avez peut-être la bonne idée d'utiliser setRequestedOrientation mais essayez de mettre l'appel dans onResume , no onCreate et dans l'utilisation de l'activité non paysagère ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED au lieu de SENSOR . Mon émulateur a aussi buggé avec le capteur, mais le non spécifié a fonctionné.

0 votes

Est-ce qu'il y a un moyen de définir l'orientation d'un service ? En fait, j'écris un service LiveWallpaper... et je dois restreindre l'orientation de l'appareil.

65voto

Alan Cartwright Points 241

J'ai eu un problème similaire.

Quand je suis entré

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

Dans le fichier manifeste, cela a entraîné l'affichage de cette activité en mode paysage. Cependant, lorsque je suis revenu aux activités précédentes, elles se sont affichées en paysage alors qu'elles étaient réglées en portrait. Cependant, en ajoutant

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

immédiatement après la section OnCreate de l'activité cible a résolu le problème. J'utilise donc maintenant les deux méthodes.

1 votes

Mais attention, si vous utilisez ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT, cela n'est pas autorisé sous la version 4.3. Vous pouvez alors utiliser les options ci-dessus ou ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT.

1 votes

Avertissement : L'utilisation de setRequestedOrientation() entraînera le redémarrage de l'activité, déclenchant ainsi deux fois onResume etc. Ajoutez ceci à votre manifeste pour chaque activité où vous le faites pour éviter cela : Android:configChanges="keyboardHidden|orientation|screenSize"

40voto

HjK Points 1266

Dans le fichier manifest Android de votre projet, trouvez la déclaration de l'activité dont vous voulez fixer l'orientation et ajoutez le morceau de code suivant ,

android:screenOrientation="landscape"

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

android:screenOrientation="portrait"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X