web-dev-qa-db-fra.com

Android, comment ne pas détruire l'activité lorsque je fais pivoter l'appareil?

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é?

79
Vasil

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

125
user235064

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"

108
egg

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).

9
er_benji

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> 
5
superheron

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>
1
pkoepke

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

0
androidworkz