Ce matin, j'ai rencontré un problème en essayant de gérer l' onConfigurationChanged
événement. Le problème est que la méthode, que je remplace, n'est pas appelée lorsque je change l'orientation du téléphone. Ne pas être appelé du tout.
J'ai mis android:configChanges="orientation"
sur l'activité définie dans le manifeste comme mentionné sur la documentation Android, mais cela ne fait aucune différence.
Avez-vous rencontré ce problème?
android:configChanges
Voici ce que le javadoc google a dit: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.
Réponses:
C'était mon gremlin pour le ~ même problème:
(À partir de http://developer.android.com/guide/topics/resources/runtime-changes.html )
TL; DR: ajoutez "| screenSize" à configChanges lorsque vous ciblez le niveau d'API 13+
la source
+1
de mon côté"screenSize"
c'était.Certains appareils de 4.0 n'appellent pas onConfigurationChanged. Ajoutez simplement un auditeur à screenSize.
la source
onConfigurationChanged
, testerConfiguration.ORIENTATION_LANDSCAPE
et inclure UNIQUEMENTandroid:configChanges="orientation"
dans le manifeste n'était pas suffisant pour ma tablette Nexus 7. MerciLe problème était que si vous utilisez cette méthode
pour forcer l'orientation de votre
Activity
en mode portrait, vous n'êtes pas candidat pour recevoir desorientation
modifications.La solution est donc de ne pas
setRequestOrientation
utiliser un mode particulier. Mais utilisez plutôtSCREEN_ORIENTATION_SENSOR.
la source
onConfigChanged
aussi, lorsque l'utilisateur fait pivoter son téléphone. Même comportement que dans l'application youtube. C'est possible?vérifiez que le paramètre "Rotation de l'écran" est activé sur votre appareil
la source
android:screenOrientation
dans unActivity
ou dans unApplication
niveau.android:configChanges="orientation|keyboardHidden"
place.la source
J'ai passé des dizaines de minutes à découvrir pourquoi cela ne fonctionnait pas. J'ai ajouté
screenSize
mais cela ne fonctionnait toujours pas.Il s'est avéré que j'avais ajouté
android:configChanges
à l'<application>
élément, pas à la<activity>
élément comme j'aurais dû!Eh bien, bien sûr, c'était mon erreur, mais nous savons tous que nous passons tous beaucoup de temps pour ce genre d'erreur stupide. Donc, j'ajoute cette réponse juste au cas où il y aurait un autre programmeur idiot comme moi.
la source
Macarse est à 100% sur l'argent avec sa deuxième option.
Essayer
android:configChanges="orientation|keyboardHidden|screenSize"
J'ai eu exactement le même problème, et sur l'émulateur 1.6, l'ajout de
keyboardHidden
causesonConfigurationChanged
à appeler pendant la rotation. Retirez-le et il cesse d'être appelé.la source
J'ai eu le même problème -
onConfigurationChanged
n'a pas été appelé lorsque l'appareil a changé d' orientation en dépit d' avoirandroid:configChanges="orientation|keyboardHidden"
dans le fichier manifeste. J'ai utilisé l'extrait de code partagé parDeva
icil'orientation ne fonctionne pas dans 2.3.3?
pour vérifier si
onConfigurationChanged
a été appelé. Ce n'était pas.Après quelques heures d'expérimentation, j'ai réalisé que j'avais les lignes suivantes dans le fichier manifeste
et lors du passage
android:targetSdkVersion="15"
àandroid:targetSdkVersion="8"
, aonConfigurationChanged
commencé à être appelé. Donc, une partie du manifeste ressemblait finalement à cecila source
attribute: screensize
»? Il peut être utile de fournir plus de détails.Je viens de découvrir que si vous avez:
dans le manifeste, onConfigurationChanged () ne sera pas appelé aussi ...
cela peut ressembler à:
cette orientation de réglage bloque le onConfigurationChanged ().
la source
N'utiliser toutes les versions sdk cible pour vous faire des complications. et pour tous les niveaux d'API, utilisez ceci comme écouteur de changement de configuration
la source
Je ne suis pas sûr que ce soit le meilleur endroit pour cela, mais en rencontrant ce problème, j'ai observé quelque chose d'intéressant.
Si l' écouteur onConfigurationChanged () ne fonctionne PAS, alors onCreate () est appelé à nouveau chaque fois que l'orientation est modifiée.
Si l' écouteur onConfigurationChanged () fonctionne, cette méthode est appelée à la place de onCreate () lorsque l'orientation change.
la source
Toutes les solutions ne fonctionnent pas car j'essaie de supprimer mon activité de thème dans le fichier manifeste Android. Si étrange
la source
Aucune des suggestions n'a fonctionné pour moi (j'avais réagi au projet natif avec ce problème), mais après des heures de débogage, j'ai trouvé que si vous avez cette ligne dans l'AppTheme de styles.xml
alors l'application ne tournera pas.
la source
@ thanhbinh84 M'a donné une idée de ce qui pouvait en être la cause.
La suppression
<item name="android:windowIsTranslucent">true</item>
de mon thème dans styles.xml l'a corrigé!la source
J'ai eu le même problème et j'avais à la fois "android: screenOrientation" et "android: configChanges" spécifiés dans le manifeste. Quand j'ai supprimé le premier, onConfigurationChanged () est appelé lors de la rotation. Étrange mais ça woks)
la source
Avez-vous
android.content.res.Configuration
dans vos déclarations d'importation? Eclipse peut insérer des importations automatiquement si vous appuyez surCtrl+Shift+O
.Si cela manque, le compilateur ne pourra pas reconnaître que vous remplacez légitimement la méthode de la superclasse et lèvera donc une erreur.
la source