J'ai une application qui ne fonctionne qu'en mode portrait, et j'ai fait les changements dans mon fichier manifeste pour chaque activité l'orientation pour être portrait. Mais lorsque je fais pivoter l'appareil, l'activité se recrée. Comment ne pas détruire l'activité?
Pour API 12 et inférieure : ajoutez
Android:configChanges="orientation"
Ajoutez "screenSize" si vous ciblez l'API 13 ou supérieure car chaque fois que votre orientation change, la taille de votre écran change également, sinon de nouveaux appareils continueront de détruire votre activité . Voir la réponse d'Egg ci-dessous pour plus d'informations sur l'utilisation de "screenSize"
Android:configChanges="orientation|screenSize"
à votre activité dans AndroidManifest.xml. De cette façon, votre activité ne sera pas redémarrée automatiquement. Voir la documentation pour plus d'informations
D'après le document officiel, Flurin a déclaré:
Remarque: Si votre application cible l'API de niveau 13 ou supérieur (comme déclaré par les attributs minSdkVersion et targetSdkVersion), vous devez également déclarer la configuration "screenSize", car elle change également lorsqu'un appareil bascule entre les orientations portrait et paysage.
Donc, si votre application cible le niveau d'API 13 ou supérieur, vous devez définir cette configuration à la place:
Android:configChanges="orientation|screenSize"
La bonne solution est
Android: configChanges = "orientation | screenSize"
Documentation Android:
La taille d'écran actuellement disponible a changé. Cela représente un changement de la taille actuellement disponible, par rapport au rapport hauteur/largeur actuel, donc changera lorsque l'utilisateur bascule entre paysage et portrait. Cependant, si votre application cible le niveau d'API 12 ou moins, votre activité gère toujours elle-même ce changement de configuration (ce changement de configuration ne redémarre pas votre activité, même lors de l'exécution sur un Android 3.2 ou version ultérieure).
J'étais en train de gâcher cela pendant un petit moment, puis je me suis rendu compte que dans le fichier Manifest, je mettais configChanges au niveau de l'application et non au niveau de l'activité. Voici à quoi ressemble le code lorsqu'il fonctionne correctement pour moi.
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<activity Android:name=".MainActivity"
Android:configChanges="orientation|screenSize|keyboardHidden">
<intent-filter>
<action Android:name="Android.intent.action.MAIN"/>
<category Android:name="Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
Maintenant que Android prend en charge l'écran partagé ("multi-fenêtre" dans Android langage), vous voudrez probablement ajouter screenSize | smallestScreenSize | screenLayout | orientation comme Donc, pour gérer la rotation et l'écran partagé, vous aurez besoin de quelque chose comme ça dans Android: configChanges
<application
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/AppTheme">
<activity Android:name=".MainActivity"
Android:configChanges="orientation|screenSize|keyboardHidden|smallestScreenSize|screenLayout">
<intent-filter>
<action Android:name="Android.intent.action.MAIN"/>
<category Android:name="Android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
Regardez ce code dans l'image flottante. Il a la manière la plus intéressante de gérer la rotation de l'écran. http://code.google.com/p/floatingimage/source/browse/#svn/trunk/floatingimage/src/dk/nindroid/rss/orientation