Je crée une application Android dans laquelle je dessine une vue sur une toile. Lorsque l'orientation de l'appareil change, l'activité redémarre. Je ne le veux pas.
Comment puis-je éviter de redémarrer l'activité lorsque l'orientation change?
Il y a différentes façons de le faire, mais comme donné ici , en utilisant
Android:configChanges="keyboardHidden|orientation|screenSize"
selon vos besoins, vous permet d'écouter les changements de configuration. Vous répondez ensuite à ces modifications en remplaçant onConfigurationChanged
et en appelant setContentView
.
C'est ce que je faisais, mais je serais intéressé de connaître les pensées des autres.
Définissez votre activité dans le fichier AndroidManifest.xml comme suit:
<activity
Android:name="com.name.SampleActivity"
Android:configChanges="keyboardHidden|orientation|screenSize"
Android:icon="@drawable/sample_icon"
Android:label="@string/sample_title"
Android:screenOrientation="portrait" >
</activity>
Vérifiez dans votre fichier de manifeste Android que vous avez écrit Android:configChanges="orientation"
sur l'activité.
Je recommanderais d'utiliser des fragments. Vous pouvez simplement utiliser setRetainInstance(true)
pour indiquer que vous souhaitez conserver votre fragment.
Ajoutez Android:configChanges="keyboardHidden|orientation"
à votre activity
Pour les utilisateurs de xamarin,
Pour éviter le redémarrage de l'application lors du changement d'orientation dans Android, ajoutezConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize
à l'attribut d'activité de toutes les classes d'activité . Par exemple, voici mon code de démonstration
[Activity(Label = "DemoApp", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
protected override void OnCreate(Bundle bundle)
{
//Some code here
}
}
J'ai essayé d'écrire Android:configChanges="keyboardHidden|orientation|screenSize"
dans la balise d'activité mais cela ne fonctionne pas.
J'ai essayé beaucoup de méthodes mais rien ne fonctionne jusqu'à ce que j'ai ajouté Android:configChanges="keyboardHidden|orientation|screenSize"
à toutes les activités de l'application et cela fonctionne parfaitement.
Ajoutez ceci à toutes vos activités dans le manifeste.
Android:configChanges="orientation|screenSize"
Exemple:
<activity Android:name=".activity.ViewActivity"
Android:label="@string/app_name"
Android:configChanges="orientation|screenSize"/>
POUR éviter de redémarrer sur keyboardHidden|orientation
- Comment désactiver le changement d’orientation sous Android?
Veuillez suivre le guide API Android - Gestion des modifications d'exécution
Utilisation de la classe d'applications - Redémarrage d'activité sur rotation Android
il suffit d'ajouter Android: configChanges = "keyboardHidden | orientation | screenSize" pour toutes les activités de l'application dans le fichier manifeste
Déclarez ceci dans votre AndroidManifest.xml
<activity Android:name=".complex_examples.VideoPlayerActivity"
Android:configChanges="keyboard|keyboardHidden|orientation
|screenSize|screenLayout|smallestScreenSize|uiMode"
Android:launchMode="singleTop"/>
Mais faites attention, Documentation Android indique que vous ne devez le faire que s’il n’ya pas de meilleures options.
Remarque: L'utilisation de cet attribut doit être évitée et utilisée uniquement en dernier recours. Veuillez lire Gestion des modifications d'exécution pour plus d'informations sur la façon de gérer correctement un redémarrage en raison d’un changement de configuration.
Si vous êtes sûr de le faire, vous pouvez gérer vous-même les changements de configuration dans onConfigurationChanged () method.