Heute Morgen hatte ich ein Problem beim Versuch, mit dem onConfigurationChanged
Ereignis umzugehen. Das Problem ist, dass die Methode, die ich überschreibe, nicht aufgerufen wird, wenn ich die Ausrichtung des Telefons ändere. Überhaupt nicht angerufen zu werden.
Ich habe die android:configChanges="orientation"
im Manifest definierte Aktivität wie in der Android-Dokumentation angegeben aktiviert, aber das macht keinen Unterschied.
Haben Sie sich dieses Problem ausgedacht?
android:configChanges
Dies ist, was der Google Javadoc sagte: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.
Antworten:
Dies war mein Gremlin für das gleiche Problem:
(Von http://developer.android.com/guide/topics/resources/runtime-changes.html )
TL; DR: Fügen Sie configChanges "| screenSize" hinzu, wenn Sie auf API-Level 13+ abzielen
quelle
+1
von meiner Seite war"screenSize"
es.Einige Geräte von 4.0 rufen onConfigurationChanged nicht auf. Fügen Sie einfach einen Listener zu screenSize hinzu.
quelle
onConfigurationChanged
, zu testenConfiguration.ORIENTATION_LANDSCAPE
und NURandroid:configChanges="orientation"
in das Manifest aufzunehmen. Vielen DankDas Problem war, dass, wenn Sie diese Methode verwenden
Um die Ausrichtung Ihres
Activity
Modus auf Hochformat zu erzwingen , können Sie keineorientation
Änderungen erhalten .Die Lösung besteht also darin, nicht
setRequestOrientation
auf einen bestimmten Modus zuzugreifen. Aber stattdessen verwendenSCREEN_ORIENTATION_SENSOR.
quelle
onConfigChanged
auch weiterhin, wenn der Benutzer sein Telefon dreht ? Gleiches Verhalten wie in der YouTube-App. Ist das möglich?Überprüfen Sie, ob auf Ihrem Gerät die Einstellung "Bildschirmdrehung" aktiviert ist
quelle
android:screenOrientation
in einemActivity
oder in einemApplication
Level verwenden.android:configChanges="orientation|keyboardHidden"
stattdessen.quelle
Ich verbrachte zehn Minuten damit, herauszufinden, warum es nicht funktionierte. Ich fügte hinzu
screenSize
aber es funktionierte immer noch nicht.Es stellte sich heraus, dass ich
android:configChanges
dem<application>
Element hinzugefügt hatte , nicht dem<activity>
Element, wie ich es hätte haben sollen!Natürlich war das mein Fehler, aber wir alle wissen, dass wir alle viel Zeit für diese Art von albernem Fehler aufwenden. Also füge ich diese Antwort hinzu, nur für den Fall, dass es einen anderen dummen Programmierer wie mich geben sollte.
quelle
Macarse ist mit seiner 2. Option zu 100% am Geld.
Versuchen
android:configChanges="orientation|keyboardHidden|screenSize"
Ich hatte genau das gleiche Problem und fügte auf dem 1.6-Emulator
keyboardHidden
Ursachen hinzuonConfigurationChanged
, die während der Rotation aufgerufen werden sollten. Entfernen Sie es und es wird nicht mehr aufgerufen.quelle
Ich hatte das gleiche Problem -
onConfigurationChanged
wurde nicht aufgerufen , wenn die Geräteausrichtung geändert , obwohl mitandroid:configChanges="orientation|keyboardHidden"
in der Manifest - Datei. Ich habe den vonDeva
hier geteilten Code verwendetOrientierung funktioniert nicht in 2.3.3?
um zu überprüfen, ob
onConfigurationChanged
angerufen wurde. Es war nicht.Nach einigen Stunden des Experimentierens stellte ich fest, dass die Manifestdatei die folgenden Zeilen enthielt
und beim Wechsel
android:targetSdkVersion="15"
zuandroid:targetSdkVersion="8"
,onConfigurationChanged
wurde angerufen. Ein Teil des Manifests sah also endlich so ausquelle
attribute: screensize
" gemeint ? Es kann hilfreich sein, wenn weitere Details angegeben werden.Ich habe das gerade gefunden, wenn Sie haben:
Im Manifest wird onConfigurationChanged () nicht auch aufgerufen ...
Dies kann ähnlich sein wie:
Diese Einstellung blockiert die onConfigurationChanged ().
quelle
Verwenden Sie keine Ziel-SDK-Versionen , um Komplikationen zu verursachen. Verwenden Sie dies für alle API-Ebenen als Listener für Konfigurationsänderungen
quelle
Ich bin mir nicht sicher, ob dies der beste Ort dafür ist, aber als ich auf dieses Problem stieß, bemerkte ich etwas Interessantes.
Wenn der Listener onConfigurationChanged () NICHT funktioniert, wird onCreate () bei jeder Änderung der Ausrichtung erneut aufgerufen.
Wenn der Listener onConfigurationChanged () funktioniert, wird diese Methode anstelle von onCreate () aufgerufen, wenn sich die Ausrichtung ändert.
quelle
Alle Lösungen funktionieren nicht, wenn ich versuche, meine Designaktivität in der Android-Manifestdatei zu entfernen. So seltsam
quelle
Keiner der Vorschläge funktionierte für mich (ich hatte ein natives Projekt mit diesem Problem reagiert), aber nach stundenlangem Debuggen stellte ich fest, dass Sie diese Zeile im AppTheme von styles.xml haben
dann dreht sich die App nicht.
quelle
@ thanhbinh84 Hat mir eine Idee gegeben, was dies verursachen könnte.
Das Entfernen
<item name="android:windowIsTranslucent">true</item>
von meinem Thema in styles.xml hat es behoben!quelle
Ich hatte das gleiche Problem und ich hatte sowohl "android: screenOrientation" als auch "android: configChanges" im Manifest angegeben. Wenn ich die erste entfernt habe, wird onConfigurationChanged () bei Rotation aufgerufen. Seltsam, aber es woks)
quelle
Haben Sie
android.content.res.Configuration
in Ihren Importanweisungen? Eclipse kann Importe automatisch einfügen, wenn Sie drückenCtrl+Shift+O
.Wenn dies fehlt, kann der Compiler nicht erkennen, dass Sie die Methode der Oberklasse zu Recht überschreiben, und gibt daher einen Fehler aus.
quelle