Je n'ai simplement besoin de rien à changer lorsque l'écran est tourné. Mon application affiche une image aléatoire lors du premier chargement et la rotation de l'appareil ne doit pas sélectionner une autre image aléatoire. Comment puis-je (simplement) faire cesser ce comportement?
152
Screen.lockOrientation(this)
de github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… pour cela. Il permet de déverrouiller ce que le manifeste ne fait pas.Réponses:
Il existe généralement trois façons de procéder:
Comme certaines réponses le suggèrent, vous pouvez distinguer les cas où votre activité est créée pour la première fois et à partir de laquelle elle est restaurée
savedInstanceState
. Cela se fait en remplaçantonSaveInstanceState
et en vérifiant le paramètre deonCreate
.Vous pouvez verrouiller l'activité dans une orientation en ajoutant
android:screenOrientation="portrait"
(ou"landscape"
) à<activity>
dans votre manifeste.Vous pouvez indiquer au système que vous avez l'intention de gérer vous-même les changements d'écran en spécifiant
android:configChanges="orientation|screenSize"
dans l'<activity>
étiquette. De cette façon, l'activité ne sera pas recréée, mais recevra un rappel à la place (que vous pouvez ignorer car cela ne vous est pas utile).Personnellement, j'irais avec (3). Bien sûr, si le verrouillage de l'application sur l'une des orientations vous convient, vous pouvez également utiliser (2).
la source
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"
travaille pour moi. Merci @Pacerierandroid:configChanges="orientation|screenSize"
valeur pour l'API> = 13, car beaucoup de gens considèrent votre réponse comme principale!La réponse de Xion était proche, mais # 3 (
android:configChanes="orientation"
) ne fonctionnera que si l'application a un niveau d'API de 12 ou moins.Au niveau d'API 13 ou supérieur, la taille de l'écran change lorsque l'orientation change, ce qui entraîne toujours la destruction de l'activité et le démarrage lorsque l'orientation change.
Ajoutez simplement l'attribut "screenSize" comme je l'ai fait ci-dessous:
Désormais, lorsque vous changez d'orientation (et que la taille de l'écran change), l'activité conserve son état et
onConfigurationChanged()
est appelée. Cela conservera tout ce qui est à l'écran (par exemple: page Web dans une vue Web) lorsque l'orientation change.J'ai appris cela sur ce site: http://developer.android.com/guide/topics/manifest/activity-element.html
De plus, c'est apparemment une mauvaise pratique, alors lisez le lien ci-dessous sur la gestion des changements d'exécution:
http://developer.android.com/guide/topics/resources/runtime-changes.html
la source
android:configChanges="orientation|screenSize"
Il vous suffit d'aller dans les
AndroidManifest.xml
étiquettes et à l'intérieur ou dans vos activités, vous devez taper cette ligne de code comme quelqu'un l'a dit:Donc, vous aurez quelque chose comme ça:
Esperons que ça marche!
la source
Ajoutez simplement l'
android:configChanges="orientation|screenSize"
onglet d'activité du fichier manifeste.Ainsi, l'activité ne redémarrera pas lorsque l'orientation changera.
la source
onSaveInstanceState()
etonCreate()
.D'après mon expérience, il est en fait préférable de gérer correctement les changements d'orientation au lieu d'essayer de mettre en place un comportement non par défaut.
Vous devez enregistrer l'image actuellement affichée
onSaveInstanceState()
et la restaurer correctement lorsque votre application s'exécute àonCreate()
nouveau.la source
android:configChanges
doit être évitée et utilisée uniquement en dernier recours. Veuillez lire Gestion des modifications à l'exécution pour plus d'informations sur la manière de gérer correctement un redémarrage en raison d'un changement de configuration."Cette solution est de loin la meilleure qui fonctionne. Dans votre fichier manifeste, ajoutez
Et dans votre classe d'activité, ajoutez le code suivant
la source
ajouter
android:configChanges="keyboardHidden|orientation|screenSize"
pour toutes les balises d' activités d'application dans le manifeste.la source
Ajoutez simplement ceci à votre
AndroidManifest.xml
Je veux dire, il y a une balise d'activité, ajoutez ceci comme un autre paramètre. Si vous avez besoin d'une orientation portrait, changez le paysage en portrait. J'espère que cela t'aides.
la source
Dans le fichier le plus important, ajoutez à chaque activité ceci. CA aidera
la source
Toutes les réponses ci-dessus ne fonctionnent pas pour moi. Donc, j'ai corrigé en mentionnant le
label
avecscreenOrientation
comme ci-dessous. Maintenant tout va bienla source
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
la source
Enregistrez les détails de l'image dans votre
onPause()
ouonStop()
et utilisez-le dansonCreate(Bundle savedInstanceState)
pour restaurer l'image.ÉDITER:
Plus d'informations sur le processus réel sont détaillées ici http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle car il est différent dans Honeycomb des versions précédentes d'Android.
la source
utilisez simplement:
android:configChanges="keyboardHidden|orientation"
la source
Comme Pacerier l'a mentionné,
android:configChanges="orientation|screenSize"
la source
Je ne sais pas si la meilleure solution, mais je la décris ici:
Tout d'abord, vous avez besoin d'un certificat avec votre classe.L'application de votre application est dans votre manifeste de ceci:
Deuxièmement, dans mon application de classe, j'ai aimé ceci:
Troisièmement, vous devez définir un indicateur sur Changement d'orientation.Dans mon cas, je le définit toujours lorsque l'activité précédente dans la navigation de l'application est appelée, donc n'appelant qu'une seule fois lorsque l'activité ultérieure est créée.
Ainsi, chaque fois que je change l'orientation de mon écran dans ce contexte, je le règle à chaque fois qu'il change ce paramètre, il vérifie s'il y a un changement d'orientation, si c'est le cas, il le valide en fonction de la valeur de cet indicateur.
En gros, je devais l'utiliser chaque fois que je faisais une demande de mise à niveau asynchrone, qu'il appelait à chaque instant qui changeait d'orientation, bloquant constamment l'application:
Je ne sais pas si c'est la solution la plus élégante et la plus belle, mais au moins ici, c'est fonctionnel :)
la source
Ajoutez ce code après la
onCreate
méthode, dans votre activité contenant leWebView
la source