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.
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é.
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.
Dans mon OnCreate(Bundle)
, je fais généralement ce qui suit:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
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"] >
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);
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"/>
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"
Cela fonctionne pour Xamarin.Android. Dans OnCreate ()
RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
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.
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" />
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.
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.
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);