Comment éviter de redémarrer l'activité lorsque l'orientation change sur Android
je crée une application Android dans laquelle je dessine une vue sur une toile. Lorsque l'orientation de l'appareil change, l'activité reprend. Je ne veux pas que ça.
Comment puis-je éviter de reprendre l'activité lorsque l'orientation change?
11 réponses
il y a plusieurs façons de le faire, mais comme indiqué ici , en utilisant
android:configChanges="keyboardHidden|orientation|screenSize"
vous permet d'écouter les changements de configuration. Vous répondez ensuite à ces changements en remplaçant onConfigurationChanged
et en appelant setContentView
.
C'est comme ça que je l'ai fait, mais je serais intéressé de connaître les pensées des autres.
définit votre activité dans L'AndroidManifest.xml comme ceci:
<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 recommande L'utilisation de Fragments. Vous pouvez simplement utiliser setRetainInstance(true)
pour notifier que vous voulez garder votre fragment.
ajouter android:configChanges="keyboardHidden|orientation"
à votre activity
pour les utilisateurs de xamarin,
pour éviter le redémarrage de l'application sur le changement d'orientation dans Android, ajouter
ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize
à l'attribut D'activité de toutes les classes d'activité.
Par exemple, ci-dessous est mon code de démo
[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 l'étiquette d'activité mais pas dans les travaux.
j'ai essayé beaucoup de méthodes mais rien ne fonctionne jusqu'à ce que j'ai ajouté android:configChanges="keyboardHidden|orientation|screenSize"
pour toutes les activités app 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 dans Android?
s'il vous Plaît suivez l'API Android "guide de 151960920" Manipulation d'Exécution les Modifications
à l'Aide de l'Application de la Classe Activité de redémarrer sur de 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 attention , Développeurs Android Documentation dit que vous devez le faire que si il n'y a pas de meilleure options de gauche.
Note: l'utilisation de cet attribut doit être évitée et n'être utilisée qu'en dernier Resort. S'il vous plaît lire manipulation des changements D'exécution pour plus d'informations comment gérer correctement un redémarrage 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 la méthode onConfigurationChanged () .