J'ai une application que je voudrais simplement utiliser en mode portrait, j'ai donc défini android: screenOrientation = "portrait" dans le manifeste XML. Cela fonctionne bien pour le téléphone HTC Magic (et empêche également les changements d'orientation sur d'autres téléphones).
Mais j'ai un problème avec le téléphone HTC G1 car j'ouvre le clavier QWERTY matériel (pas le clavier virtuel). Mon activité reste en mode portrait, mais elle semble redémarrer et perd tous ses états. Cela ne se produit pas avec la version HTC Hero .
Mon application est assez grande, donc je ne veux pas qu'elle redémarre et perde tous ses états à l'ouverture du clavier. Comment puis-je empêcher cela?
android
android-activity
android-orientation
Vidar Vestnes
la source
la source
Réponses:
Mise à jour d'avril 2013: ne faites pas ça. Ce n'était pas une bonne idée en 2009 lorsque j'ai répondu pour la première fois à la question et ce n'est vraiment pas une bonne idée maintenant. Voir cette réponse par hackbod pour des raisons:
Évitez de recharger l'activité avec asynctask sur le changement d'orientation dans Android
Ajoutez
android:configChanges="keyboardHidden|orientation"
à votre AndroidManifest.xml. Cela indique au système les modifications de configuration que vous allez gérer vous-même - dans ce cas, en ne faisant rien.Voir ConfigChanges de référence pour les développeurs pour plus de détails.
Cependant, votre application peut être interrompue à tout moment, par exemple par un appel téléphonique, vous devez donc vraiment ajouter du code pour enregistrer l'état de votre application lorsqu'elle est en pause.
Mise à jour: à partir d'Android 3.2, vous devez également ajouter "screenSize":
À partir du guide du développeur Gérer vous-même la configuration
la source
Vous devez modifier AndroidManifest.xml comme Intrications (précédemment Ashton) mentionné et assurez-vous que l'activité gère l'événement onConfigurationChanged comme vous le souhaitez. Voici à quoi cela devrait ressembler:
la source
setRequestedOrientation()
enonCreate()
.onConfigurationChanged()
appelé avantonCreate()
si la définition de l'orientation avant la définition de contentViews dans oncreate est une meilleure approche, définir la configuration à laquelle il appartient est également plus propre, donc cette réponse est toujours valable.J'ai toujours trouvé que tu avais besoin des deux
la source
Comme indiqué, définissez
android:configChanges
votre activité (dans le fichier manifeste) surkeyboardHidden|orientation
, puis:1) Remplacer
onConfigurationChanged()
2) Ajoutez cette ligne à votre activité
onCreate()
C'est mieux que d'ajouter la même ligne à
onConfigurationChanged
, car votre application passera en mode portrait, puis reviendra au paysage (cela ne se produira qu'une seule fois, mais c'est ennuyeux).Vous pouvez également définir
android:screenOrientation="nosensor"
votre activité (en manifeste). Mais de cette façon, vous n'êtes pas du tout en mesure de gérer les changements d'orientation.la source
Utilisez ceci..
la source
Dans la méthode OnCreate de votre activité, utilisez ce code:
Maintenant, votre orientation sera définie sur portrait et ne changera jamais.
la source
Dans le fichier AndroidManifest.xml, pour chaque activité que vous souhaitez verrouiller, ajoutez la dernière
screenOrientation
ligne:Ou android: screenOrientation = "paysage" .
la source
Dans votre fichier androidmanifest.xml :
ou
la source
Pour verrouiller l'écran par code, vous devez utiliser la rotation réelle de l'écran (0, 90, 180, 270) et vous devez connaître sa position naturelle, dans un smartphone la position naturelle sera portrait et dans une tablette, ce sera le paysage.
Voici le code (méthodes de verrouillage et de déverrouillage), il a été testé sur certains appareils (smartphones et tablettes) et il fonctionne très bien.
la source
Dans Visual Studio Xamarin:
using Android.Content.PM;
à votre liste d'espace de noms d'activité.[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
comme attribut à votre classe, comme ça:
la source
Ajouter
à votre manifeste.
la source
Veuillez noter qu'aucune des méthodes ne semble fonctionner maintenant!
Dans Android Studio 1, une méthode simple consiste à ajouter
android:screenOrientation="nosensor"
.Cela verrouille efficacement l'orientation de l'écran.
la source