164 votes

Ne pas recharger l'application lorsque l'orientation change

Il y a beaucoup de discussions à ce sujet, mais très franchement, ils sont tous assez avancés et, en tant que débutant en développement Android, je ne peux pas faire en sorte que cela fonctionne.

Je n'ai simplement besoin de rien pour changer lorsque l'écran est en rotation. Mon application affiche une image aléatoire lors de son 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?

274voto

Xion Points 11130

Il ya généralement trois façons de le faire:

  1. Comme certaines des réponses proposées, vous pouvait distinguer le cas de votre activité en cours de création pour la première fois et d'être restauré à partir de savedInstanceState. Ceci est fait en substituant onSaveInstanceState et de vérifier le paramètre de onCreate.

  2. Vous pouvez verrouiller l'activité dans une orientation par l'ajout d' android:screenOrientation="portrait" (ou "landscape") <activity> dans votre manifeste.

  3. Vous pourriez dire que le système que vous avez conçu pour traiter les changements d'écran pour vous-même en spécifiant android:configChanges="screenOrientation" dans la <activity> balise. De cette façon, l'activité ne sera pas recréé, mais recevront un rappel de la place (vous pouvez ignorer comme il n'est pas utile pour vous).

Personnellement, j'irais avec (3). Bien sûr, si le verrouillage de l'application de l'une des orientations est bien avec vous, vous pouvez aussi aller avec (2).

219voto

corbin Points 1097

Xion réponse était proche, mais le n ° 3 (android:configChanes="orientation") ne fonctionnent pas si l'application dispose d'une API de niveau 12 ou plus bas.

L'API de niveau 13 ou au-dessus, la taille de l'écran change lorsque les changements d'orientation, de sorte que cela provoque toujours l'activité à être détruit et a commencé lorsque les changements d'orientation.

Il suffit d'ajouter le "screenSize" attribut comme je l'ai fait ci-dessous:

<activity
    android:name=".YourActivityName"
    android:configChanges="orientation|screenSize">
</activity>

Maintenant, quand votre changement d'orientation (et de la taille de l'écran de modification), l'activité permet de garder son état et onConfigurationChanged() est appelée. Cela permet de garder tout ce qui est sur l'écran (ex: page web dans une Webview) lorsque l'orientation chagnes.

Appris cela à partir de ce site: http://developer.android.com/guide/topics/manifest/activity-element.html

Aussi, c'est apparemment une mauvaise pratique afin de lire le lien ci-dessous sur la gestion des Changements d'Exécution:

http://developer.android.com/guide/topics/resources/runtime-changes.html

27voto

Josue Rocha Points 78

Vous devez simplement aller dans le fichier AndroidManifest.xml et, à l'intérieur ou dans les libellés de vos activités, vous devez taper cette ligne de code comme quelqu'un d'autre l'a dit:

 android:configChanges="orientation|screenSize"
 

Donc, vous aurez quelque chose comme ça:

 <activity android:name="ActivityMenu"
android:configChanges="orientation|screenSize">
</activity>
 

Esperons que ça marche!

16voto

Aiyaz Parmar Points 1

Ajoutez simplement android: configChanges = "orientation | screenSize" dans l'onglet d'activité du fichier manifeste.

alors, l'activité ne redémarre pas lorsque l'orientation change.

11voto

dmon Points 20795

D'après mon expérience, il est en fait préférable de gérer les changements d'orientation correctement plutôt que d'essayer d'adopter un comportement autre que celui par défaut. Pourquoi n'enregistrez-vous pas l'image actuellement affichée dans onSaveInstanceState() et la restaurez-vous correctement lorsque votre application exécute à nouveau onCreate() ?

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