web-dev-qa-db-fra.com

Forcer une activité Android à toujours utiliser le mode paysage

J'utilise le Android VNC sur mon HTC G1 . Mais pour une raison quelconque, cette application est toujours en mode paysage même si mon G1 est en mode portrait. Puisque le Android VNC Viewer est un logiciel à code source ouvert, j'aimerais savoir comment est-il possible de coder une activité en mode "paysage". Je voudrais le changer pour respecter l'orientation du téléphone.

134
hap497

En regardant le fichier AndroidManifest.xml ( lien ), à la ligne 9:

<activity Android:screenOrientation="landscape" Android:configChanges="orientation|keyboardHidden" Android:name="VncCanvasActivity">

Cette ligne spécifie le screenOrientation en tant que paysage, mais l'auteur va plus loin en remplaçant tout changement d'orientation de l'écran avec configChanges="orientation|keyboardHidden". Cela pointe vers une fonction remplacée dans VncCanvasActivity.Java.

Si vous regardez VncCanvasActivity, la fonction remplacée figure à la ligne 109:

@Override
public void onConfigurationChanged(Configuration newConfig) {
  // ignore orientation/keyboard change
  super.onConfigurationChanged(newConfig);
}

L'auteur a spécifiquement mis un commentaire pour ignorer tout changement de clavier ou d'orientation.


Si vous souhaitez modifier cela, vous pouvez revenir au fichier AndroidManifest.xml présenté ci-dessus et modifier la ligne en:

<activity Android:screenOrientation="sensor" Android:name="VncCanvasActivity">

Cela devrait changer le programme pour passer de portrait en paysage lorsque l'utilisateur fait pivoter le périphérique.

Cela peut fonctionner, mais peut gâcher l'apparence de l'interface graphique, en fonction de la façon dont la présentation a été créée. Vous devrez rendre compte de cela. En outre, en fonction de la manière dont les activités sont codées, vous remarquerez peut-être que lorsque l'orientation de l'écran est modifiée, les valeurs renseignées dans les zones de saisie disparaissent. Cela devra peut-être aussi être traité.

181
Pulkit Sethi

Vous pouvez également définir les mêmes données dans votre code Java.

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Les autres valeurs sur ActivityInfo vous permettront de le redéfinir en mode portrait ou verrouillé. Personnellement, j'aime bien définir quelque chose dans le manifeste comme suggéré dans une autre réponse à cette question, puis le changer plus tard en utilisant l'appel ci-dessus dans le Android SDK s'il y a un besoin.

114
haseman

Dans mon OnCreate(Bundle), je fais généralement ce qui suit:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
39
anwarma

Vous pouvez spécifier l'orientation d'une activité dans le manifeste. Voir ici .

<activity Android:allowTaskReparenting=["true" | "false"]
...
          Android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
...
                                       "adjustResize", "adjustPan"] >  
31
Michael Krauklis

Dans le manifeste:

<activity  Android:name=".YourActivity"
Android:screenOrientation="portrait"
Android:configChanges="orientation|screenSize">

Dans votre activité:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);
19
avisper

Voici le code que j'ai utilisé pour afficher toutes les activités en mode paysage:

<activity Android:screenOrientation="landscape"
          Android:configChanges="orientation|keyboardHidden"
          Android:name="abcActivty"/>
10
Megha

Une solution simple et rapide concerne le fichier AndroidManifest.xml. Ajoutez ce qui suit pour chaque activité que vous souhaitez forcer en mode paysage:

Android:screenOrientation="landscape"
7
joshgoldeneagle

Cela fonctionne pour Xamarin.Android. Dans OnCreate ()

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
5
ComeIn

C'est ça!! Longue attente pour ce correctif.

J'ai un ancien problème Android concernant le démarrage double d'une activité nécessitant (par programmation) le mode paysage: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

Maintenant, Android active le mode Paysage au démarrage.

4
AndrewDC

Arslan, pourquoi voulez-vous forcer l'orientation de manière grammaticale, alors qu'il y a déjà un moyen de manifester <activity Android:name=".youractivityName" Android:screenOrientation="portrait" />

3
Blue Moon

Le faire dans le code est une mauvaise OMI et encore plus si vous le mettez dans onCreate. Faites-le dans le manifeste et le "système" connaît l'orientation depuis le démarrage de l'application. Et ce type de méta ou "orientation" de haut niveau DEVRAIT être dans le manifeste. Si vous voulez vous le prouver, mettez un point final à l'activité de création de l'activité. Si vous le faites en code, il sera appelé deux fois: il démarrera en mode Portrait puis passera en Paysage. Cela ne se produit pas si vous le faites dans le manifeste.

1
HörmannHH

Pour Android 4. (sandwich), et plus tard, je devais les ajouter, en plus de la valeur landscape.

Android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

Utiliser uniquement keyboardHidden|orientation entraînerait toujours des fuites de mémoire et la recréation de mes activités lorsque vous appuieriez sur le bouton d'alimentation.

0
Peterdk

Utilisez ActivityInfo (Android.content.pm.ActivityInfo) dans votre méthode onCreate avant d'appeler la méthode setLayout comme celle-ci.

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
0
Yamikani Sita