Ich brauche einfach nichts zu ändern, wenn der Bildschirm gedreht wird. Meine App zeigt beim ersten Laden ein zufälliges Bild an, und durch Drehen des Geräts sollte kein anderes zufälliges Bild ausgewählt werden. Wie kann ich (einfach) dieses Verhalten stoppen?
152
Screen.lockOrientation(this)
unter github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/… an. Es ermöglicht das Entsperren, was das Manifest nicht tut.Antworten:
Es gibt im Allgemeinen drei Möglichkeiten, dies zu tun:
Wie in einigen Antworten vorgeschlagen, können Sie die Fälle unterscheiden, in denen Ihre Aktivität zum ersten Mal erstellt und wiederhergestellt wurde
savedInstanceState
. Dies erfolgt durch ÜberschreibenonSaveInstanceState
und Überprüfen des Parameters vononCreate
.Sie können die Aktivität in einer Ausrichtung sperren, indem Sie sie in Ihrem Manifest hinzufügen
android:screenOrientation="portrait"
(oder"landscape"
)<activity>
.Sie können dem System mitteilen, dass Sie Bildschirmänderungen selbst vornehmen möchten, indem Sie
android:configChanges="orientation|screenSize"
im<activity>
Tag angeben. Auf diese Weise wird die Aktivität nicht neu erstellt, sondern erhält stattdessen einen Rückruf (den Sie ignorieren können, da er für Sie nicht nützlich ist).Persönlich würde ich mit (3) gehen. Wenn es für Sie in Ordnung ist, die App an eine der Ausrichtungen zu binden, können Sie natürlich auch mit (2) fortfahren.
quelle
android:configChanges="orientation|screenSize"
android:configChanges="orientation|screenSize"
funktioniert bei mir. Danke @Pacerierandroid:configChanges="orientation|screenSize"
Wert für API> = 13, da viele Leute Ihre Antwort als Hauptantwort ansehen!Xions Antwort war knapp, aber # 3 (
android:configChanes="orientation"
) funktioniert nur, wenn die Anwendung eine API-Stufe von 12 oder niedriger hat.In API-Version 13 oder höher ändert sich die Bildschirmgröße, wenn sich die Ausrichtung ändert. Dadurch wird die Aktivität weiterhin zerstört und gestartet, wenn sich die Ausrichtung ändert.
Fügen Sie einfach das Attribut "screenSize" hinzu, wie ich es unten getan habe:
Wenn Sie nun die Ausrichtung ändern (und die Bildschirmgröße ändert), behält die Aktivität ihren Status bei und
onConfigurationChanged()
wird aufgerufen. Dadurch bleibt alles auf dem Bildschirm (z. B. Webseite in einer Webansicht) erhalten, wenn sich die Ausrichtung ändert.Das haben Sie auf dieser Website gelernt: http://developer.android.com/guide/topics/manifest/activity-element.html
Dies ist anscheinend auch eine schlechte Praxis. Lesen Sie daher den folgenden Link zum Umgang mit Laufzeitänderungen:
http://developer.android.com/guide/topics/resources/runtime-changes.html
quelle
android:configChanges="orientation|screenSize"
Sie müssen nur zum
AndroidManifest.xml
und innerhalb oder in Ihren Aktivitätsetiketten gehen, Sie müssen diese Codezeile eingeben, wie jemand dort oben sagte:Sie haben also ungefähr Folgendes:
Hoffe, es funktioniert!
quelle
Einfach hinzufügen
android:configChanges="orientation|screenSize"
Registerkarte Aktivität der Manifestdatei hinzu.Die Aktivität wird also nicht neu gestartet, wenn sich die Ausrichtung ändert.
quelle
onSaveInstanceState()
und verwendetonCreate()
.Ich habe die Erfahrung gemacht, dass es eigentlich besser ist, nur mit den Orientierungsänderungen richtig umzugehen, als zu versuchen, ein nicht standardmäßiges Verhalten zu erkennen.
Sie sollten das aktuell angezeigte Bild speichern
onSaveInstanceState()
und ordnungsgemäß wiederherstellen, wenn Ihre AnwendungonCreate()
erneut ausgeführt wird.quelle
android:configChanges
sollte vermieden und nur als letzter Ausweg verwendet werden. Weitere Informationen zur ordnungsgemäßen Behandlung eines Neustarts aufgrund einer Konfigurationsänderung finden Sie unter Behandeln von Laufzeitänderungen ."Diese Lösung ist bei weitem die am besten funktionierende. Fügen Sie in Ihrer Manifestdatei hinzu
Fügen Sie in Ihrer Aktivitätsklasse den folgenden Code hinzu
quelle
Fügen Sie
android:configChanges="keyboardHidden|orientation|screenSize"
für alle App-Aktivitäten Tags im Manifest hinzu.quelle
Fügen Sie dies einfach zu Ihrem hinzu
AndroidManifest.xml
Ich meine, es gibt ein Aktivitäts-Tag. Fügen Sie dies als weiteren Parameter hinzu. Wenn Sie eine Hochformatausrichtung benötigen, ändern Sie die Querformatstruktur in Hochformat. Hoffe das hilft.
quelle
Fügen Sie in jeder Datei zu jeder Aktivität diese hinzu. Das wird helfen
quelle
Alle oben genannten Antworten funktionieren bei mir nicht. Also habe ich behoben, indem ich das
label
mitscreenOrientation
wie unten erwähne . Jetzt ist alles in Ordnungquelle
http://animeshrivastava.blogspot.in/2017/08/activity-lifecycle-oncreate-beating_3.html
quelle
Speichern Sie die Bilddetails in Ihrem
onPause()
oderonStop()
und verwenden Sie sie inonCreate(Bundle savedInstanceState)
, um das Bild wiederherzustellen.BEARBEITEN:
Weitere Informationen zum eigentlichen Prozess finden Sie hier http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle, da es sich in Honeycomb von früheren Android-Versionen unterscheidet.
quelle
benutz einfach :
android:configChanges="keyboardHidden|orientation"
quelle
Wie Pacerier erwähnte,
android:configChanges="orientation|screenSize"
quelle
Ich weiß nicht, ob die beste Lösung ist, aber ich beschreibe sie hier:
Zuallererst benötigen Sie ein Zertifikat mit Ihrer Klasse. Die Anwendung Ihrer App ist in Ihrem Manifest davon:
Zweitens hat mir in meiner Klassen-App Folgendes gefallen:
Drittens müssen Sie ein Flag auf Orientierungsänderung setzen. In meinem Fall setze ich es immer, wenn die vorherige Aktivität in der App-Navigation aufgerufen wird. Rufen Sie also nur einmal auf, wenn die spätere Aktivität erstellt wird.
Jedes Mal, wenn ich die Ausrichtung meines Bildschirms in diesem Kontext ändere, setze ich sie jedes Mal, wenn ich diese Einstellung ändere. Sie prüft, ob sich die Ausrichtung ändert. Wenn ja, wird sie anhand des Werts dieses Flags überprüft.
Grundsätzlich musste ich es verwenden, wenn ich eine asynchrone Nachrüstanforderung stellte, die er jeden Moment aufrief, der die Ausrichtung änderte und die Anwendung ständig zum Absturz brachte:
Ich weiß nicht, ob es die eleganteste und schönste Lösung ist, aber zumindest hier ist es funktional :)
quelle
Fügen Sie diesen Code nach der
onCreate
Methode in Ihrer Aktivität hinzu, die die enthältWebView
quelle