159 votes

onConfigurationChanged n'est pas appelé

Ce matin, j'ai rencontré un problème en essayant de gérer la onConfigurationChanged événement. Le problème est que la méthode, que je surcharge, n'est pas appelée lorsque je change l'orientation du téléphone. Elle n'est pas appelée du tout.

J'ai mis android:configChanges="orientation" sur l'activité définie dans le manifeste comme mentionné dans la documentation Android, mais cela ne fait pas de différence.

Avez-vous rencontré ce problème ?

1 votes

J'ai le même problème avec Android:configChanges="keyboardHidden" - onConfigurationChanged n'est pas appelé lorsque le clavier souple glisse vers l'intérieur ou l'extérieur.

0 votes

KeyboardHidden n'est pas déclenché par le clavier logiciel, mais uniquement par les claviers matériels, comme le clavier coulissant du Droid.

11 votes

Vous devez ajouter "screenSize" dans android:configChanges C'est ce que dit la javadoc de Google : Note: If your application targets API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), then you should also declare the "screenSize" configuration, because it also changes when a device switches between portrait and landscape orientations.

257voto

nmr Points 5504

C'était mon gremlin pour le même problème :

Attention : À partir d'Android 3.2 (niveau 13 de l'API), la " taille de l'écran " change également lorsque l'appareil passe du mode portrait au mode terrestre. change également lorsque l'appareil passe de l'orientation portrait à l'orientation paysage. et paysage. Par conséquent, si vous voulez éviter les redémarrages de l'exécution dus à un changement d'orientation lorsque vous développez pour le niveau API 13 ou plus (comme déclarés par les attributs minSdkVersion et targetSdkVersion), vous devez devez inclure la valeur "screenSize" en plus de la valeur "orientation". en plus de la valeur "orientation". En d'autres termes, vous devez décalquer Android:configChanges="orientation|screenSize". Toutefois, si votre application vise le niveau 12 de l'API ou un niveau inférieur, votre activité doit toujours gère ce changement de configuration elle-même (ce changement de configuration configuration ne redémarre pas votre activité, même lorsqu'elle fonctionne sur un appareil Android 3.2 ou supérieur).

(De http://developer.Android.com/guide/topics/resources/runtime-changes.html )

TL;DR : ajouter "|screenSize" à configChanges lorsque l'on vise le niveau 13+ de l'API

9 votes

Wow, juste un seul attribut à ajouter et c'est tout, +1 de mon côté "screenSize" c'était.

0 votes

Philipp Qu'est-ce que cela apporterait de régler l'orientation sur le capteur ? Je ne vois pas en quoi cela pourrait être utile. Merci quand même pour la modification.

0 votes

4 ans plus tard, les gens se font toujours mordre par ce truc :)

43voto

Corbella Points 558

Certains appareils de la 4.0 n'appellent pas onConfigurationChanged. Ajoutez simplement un écouteur à screenSize aussi.

android:configChanges="orientation|screenSize"

0 votes

Cela a résolu mon problème. En remplaçant le onConfigurationChanged en testant contre Configuration.ORIENTATION_LANDSCAPE et comprenant UNIQUEMENT android:configChanges="orientation" dans le manifeste n'était pas suffisante pour ma tablette Nexus 7. Merci

0 votes

C'était une solution pour moi sur 5.0.1.

42voto

lblasa Points 1398

Le problème est que si vous utilisez cette méthode

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

pour forcer l'orientation de votre Activity en mode portrait, vous n'êtes pas candidat pour recevoir orientation changements.

Donc la solution est de ne pas setRequestOrientation à un mode particulier. Mais à la place, utilisez SCREEN_ORIENTATION_SENSOR.

5 votes

Oui, ça marche, mais que faire si je ne veux pas que mon application soit tournée ? je veux qu'elle reste en mode paysage.

0 votes

Vous devez spécifier la <activité Android:name=".MyActivity" Android:screenOrientation="landscape" > </activité> dans votre fichier menifest

4 votes

Comment puis-je à la fois utiliser cette fonction (lorsque l'utilisateur clique sur "Plein écran" dans un lecteur vidéo) ET continuer à recevoir les informations suivantes onConfigChanged également, lorsque l'utilisateur fait tourner son téléphone. Même comportement que dans l'application youtube. Est-ce possible ?

31voto

Vérifiez que le paramètre "Rotation de l'écran" de votre appareil est activé.

"Screen rotation" setting

7 votes

J'ai eu ce drôle de problème...:D

0 votes

Est-il possible de faire pivoter l'activité même si l'option "Rotation de l'écran" est désactivée ? Si c'est le cas, dites-moi comment faire... ....... D'après ce que j'ai compris, cela ne fonctionnera pas, mais certaines applications font pivoter l'activité en mode paysage.

2 votes

S**t !!! J'ai passé 4-5 heures à essayer de faire fonctionner mon code ! Un moyen de contourner cela, comme je l'ai appris d'une autre réponse est d'inclure <Android:orientation="sensor"> dans le manifeste

19voto

Macarse Points 36519
  1. Vérifiez que vous n'utilisez pas android:screenOrientation dans un Activity ou dans un Application niveau.
  2. Essayez d'utiliser android:configChanges="orientation|keyboardHidden" à la place.

1 votes

Comment puis-je utiliser Android:screenOrientation et je veux que la méthode onConfigurationChanged soit exécutée, que puis-je faire ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X