Maison > Java > javaDidacticiel > Cycle de vie de commutation d'écran horizontal et vertical d'activité Android

Cycle de vie de commutation d'écran horizontal et vertical d'activité Android

高洛峰
Libérer: 2017-01-07 15:55:53
original
2109 Les gens l'ont consulté

Avant-propos

En développement, nous devons souvent faire face au changement d'écran horizontal et vertical. La façon de le gérer en premier dépend du cycle de vie

Déclaration

Activité. doit rappeler deux fonctions lors du basculement entre les écrans horizontaux et verticaux, donc ces deux fonctions sont temporairement considérées comme faisant partie du cycle de vie de la commutation d'écran horizontale et verticale d'activité. Ces deux fonctions sont les suivantes

onSaveInstanceState(Bundle outState) :Activity 即将销毁时保存数据
onRestoreInstanceState(Bundle savedInstanceState) : Activity 重建或者恢复时候取出数据
Copier après la connexion

.

Commutation d'écran horizontale et verticale Cycle de vie

1. Démarrez le programme et entrez dans l'interface d'activité

Android Activity 横竖屏切换的生命周期

. 2. Faites pivoter l'écran

Android Activity 横竖屏切换的生命周期

3, faites pivoter à nouveau l'écran

4 Définissez

android:configChanges="orientation|screenSize" dans AndroidManifest.xml. Le changement d'écran ne rappellera pas chaque cycle de vie, mais exécutera uniquement la méthode onConfigurationChanged

Android Activity 横竖屏切换的生命周期

Remarque :

MiniSdkVersion est supérieur à ou. égal à 13 : android:configChanges="orientation" ou android:configChanges="orientation|keyboardHidden" Rappeler chaque cycle de vie

Lorsque MiniSdkVersion est inférieur à 13 :

(1) Lorsque l'androïde :configChanges de l'Activité n'est pas défini, chaque cycle de vie sera rappelé lors du changement d'écran Il sera exécuté une fois lors du changement d'écran horizontal et une fois lors du changement d'écran vertical Exécuté deux fois

(2) Lors de la définition de l'android:configChanges="orientation" de l'activité, chaque cycle de vie sera toujours appelé à nouveau lors du changement d'écran, et il ne sera exécuté qu'une seule fois lors du changement d'écran horizontal ou vertical

(3) Lors de la définition de l'activité android:configChanges="orientation|keyboardHidden", le changement d'écran ne rappellera pas chaque cycle de vie, seule la méthode onConfigurationChanged sera exécutée

5. Évitez de changer d'écran et redémarrez le cycle de vie de l'activité

D'après le cycle de vie de changement d'écran ci-dessus, nous pouvons voir que chaque commutateur est recréé. Afin d'éviter des problèmes inutiles tels que la rotation de l'écran pendant la lecture vidéo, c'est une meilleure solution pour éviter de répéter le cycle de vie

(1) Versions avant Android 2.3 android:configChanges="orientation|keyboardHidden"

(2) Versions après Android 3.0 android:configChanges="orientation|screenSize"

écrans horizontaux et verticaux Paramètres

La commutation d'écran horizontale et verticale sur Android est relativement courante dans le développement de téléphones mobiles. Afin d'éviter des problèmes inutiles lors de la commutation entre les écrans horizontaux et verticaux pendant le processus de développement, de nombreux logiciels interdisent généralement la commutation entre les écrans horizontaux et verticaux.

1. Définissez la valeur de l'attribut android:screenOrientation dans l'activité dans AndroidManifest.xml pour y parvenir.

(1) Écran vertical : android:screenOrientation="portrait"

(2) Écran horizontal : android:screenOrientation="landscape"

2. Dans le jeu de codes Java avec un code similaire à celui-ci (cette méthode n'est pas recommandée, elle sera lente lors du démarrage d'une grande application dans différentes directions)

(1) Écran vertical : setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)

(2 ) Écran horizontal : setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

3. Si vous souhaitez interdire complètement le retournement, ignorez la commutation provoquée par l'induction gravitationnelle (cela ne fonctionne pas sur le simulateur, mais c'est correct sur le vrai appareil)

(1) Ignorer la gravité : android:screenOrientation="nosensor"

Reconnaissance d'écran horizontale et verticale

1. Déterminez dans onConfigurationChanged pour onConfigurationChanged. pour être efficace dans la surveillance des changements d'orientation de l'écran, les conditions suivantes sont requises

(1) AndroidManifest.xml ajoute des autorisations :

(2) AndroidManifest.xml Les attributs MiniSdkVersion et TargetSdkVersion définis dans sont supérieurs ou égaux à 13

(3) Ajouter : android:configChanges="keyboard|screenSize| orientation|layoutDirection"

(4) dans l'activité de AndroidManifest.xml Faire un jugement dans onConfigurationChanged(Configuration newConfig)

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == 1)//竖屏
if(newConfig.orientation == 2)// 横屏
}
Copier après la connexion

2. Parce que lorsque l'écran passe à l'écran horizontal, le système appellera à nouveau la méthode onCreate de l'activité. Vérifiez la direction actuelle dans onCreate, puis laissez votre setContentView charger un XML de mise en page différent.

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.i("info","landscape"); // 横屏
} else if(this.getResources().getConfiguration().orientation ==Configuration.ORIENTATION_PORTRAIT) {
Log.i("info","portrait"); // 竖屏
}
Copier après la connexion

Remarque : Cette méthode ne nécessite pas de définir onConfigurationChanged dans AndroidManifest.xml pour redémarrer le cycle de vie

Basculer les fichiers de mise en page entre horizontal et Paramètres des écrans verticaux

Si vous souhaitez que le logiciel bascule entre les écrans horizontaux et verticaux, différentes dispositions peuvent être nécessaires car la hauteur et la largeur des écrans horizontaux et verticaux changeront. Vous pouvez changer de mise en page via les méthodes suivantes

(1) Créez les répertoires layout-land et layout-port dans le répertoire res, et les noms de fichiers de mise en page correspondants restent inchangés, tels que main.xml. layout-land est une disposition d'écran horizontale, layout-port est une disposition d'écran verticale, ne vous inquiétez pas pour les autres, le simulateur les trouvera automatiquement.

(2) Dans la reconnaissance d'écran horizontale et verticale ci-dessus, si les écrans horizontaux et verticaux changent, déterminez la direction dans onCreate() ou onConfigurationChanged(), puis réinitialisezContentView dans la méthode correspondante pour charger une mise en page XML différente. fichiers

Enregistrer et lire les données lors du basculement entre les écrans horizontaux et verticaux

De plus, chaque changement d'écran dans Android redémarrera l'activité, de sorte que l'état actuel de l'activité doit être enregistré avant que l'activité ne soit détruite , et lorsque l'activité est à nouveau créée Chargez la configuration pour que le jeu en cours ne redémarre pas automatiquement !

Sauvegarde des données d'activité

(1) Si l'activité est détruite ou recréée en raison de contraintes de ressources système ou lorsque l'écran est tourné, le système aura cette activité lorsque l'utilisateur y reviendra. Pour les enregistrements antérieurs, le système utilisera les données d'enregistrement enregistrées (état de l'instance), qui sont des paires clé-valeur stockées dans l'objet Bundle. Le système utilise Bundle pour enregistrer les informations par défaut

(2) Dans l'ordre. pour enregistrer des mises à jour supplémentaires Pour ajouter plus de données à l'état de l'instance, nous devons réécrire la fonction de rappel onSaveInstanceState(Bundle outState). Le système transmettra l'objet Bundle lorsque l'activité est anormalement détruite, afin que nous puissions ajouter des informations supplémentaires au Bundle. et enregistrez-le dans le système. Si le système souhaite recréer cette instance d'activité après la destruction de l'activité, l'objet Bundle précédent (le système) sera transmis au

de votre activité (3) L'activité commence à s'arrêter et le système appelez onSaveInstanceState(Bundle outState ), l'activité peut utiliser une collection de paires clé-valeur pour enregistrer les informations d'état. Cette méthode enregistrera les informations d'état de la vue Activité par défaut, telles que le texte dans le composant EditText ou la position coulissante de ListView

Récupération des données d'activité

(1) Lorsque l'activité est reconstruit à partir de Destory, nous pouvons restaurer l'état enregistré à partir du bundle d'activité transmis par le système. Les méthodes de rappel onCreate() et onRestoreInstanceState() reçoivent le même Bundle, qui contient les mêmes informations sur l'état de l'instance.

(2) Puisque la méthode onCreate() sera appelée à la fois lorsqu'une nouvelle instance d'activité est créée pour la première fois et lorsqu'une instance précédemment détruite est recréée, nous devons vérifier s'il s'agit d'un objet Bundle avant d'essayer de le lire null. S'il est nul, le système crée une nouvelle instance d'activité au lieu de restaurer l'activité précédemment détruite.

(3) Vous pouvez également choisir d'implémenter onRestoreInstanceState() au lieu de restaurer les données dans la méthode onCreate. La méthode onRestoreInstanceState() sera exécutée après la méthode onStart(). Le système n'appellera onRestoreInstanceState() que lorsque des informations d'état doivent être restaurées, il n'est donc pas nécessaire de vérifier si le Bundle est nul.

Ce qui précède représente les connaissances sur le cycle de vie de la commutation d'écran horizontale et verticale d'Android Activity introduites par l'éditeur. J'espère que cela sera utile à tout le monde !

Pour plus d'articles liés au cycle de vie de la commutation d'écran horizontale et verticale d'Android Activity, veuillez faire attention au site Web PHP chinois !


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal