Wie deaktiviere ich die Ausrichtungsänderung auf Android?

Lesezeit: 5 Minuten

Wie deaktiviere ich die Ausrichtungsanderung auf Android
Vidar Vestnes

Ich habe eine Anwendung, die ich nur im Hochformat verwenden möchte, also habe ich android:screenOrientation=”portrait” im Manifest-XML definiert. Das funktioniert OK für die HTC Magic Telefon (und verhindert auch Ausrichtungsänderungen auf anderen Telefonen).

Aber ich habe ein Problem mit der HTC G1 Telefon, wenn ich die Hardware öffne QWERTY Tastatur (nicht die virtuelle Tastatur). Meine Aktivität bleibt im Hochformat, aber sie scheint neu gestartet zu werden und verliert alle ihre Zustände. Das passiert bei der nicht HTC Hero Ausführung.

Meine Anwendung ist ziemlich groß, daher möchte ich nicht, dass sie neu gestartet wird und alle Zustände verliert, wenn die Tastatur geöffnet wird. Wie kann ich das verhindern?

  • Versuchen Sie auch, hier nachzusehen: stackoverflow.com/questions/2366706/…

    – Andy Weinstein

    7. Mai 2012 um 19:56 Uhr

  • mögliches Duplikat von Wie kann die Anwendung die Änderung der Bildschirmausrichtung in Android vollständig ignorieren?

    – Peter O.

    15. Februar 2013 um 18:19 Uhr

Wie deaktiviere ich die Ausrichtungsanderung auf Android
Verwicklungen

Update April 2013: Tun Sie dies nicht. Es war keine gute Idee im Jahr 2009, als ich die Frage zum ersten Mal beantwortete, und es ist jetzt wirklich keine gute Idee. Siehe diese Antwort von Hackbod aus Gründen:

Vermeiden Sie das Neuladen von Aktivitäten mit Asynctask bei Orientierungsänderung in Android

Addieren android:configChanges="keyboardHidden|orientation" zu Ihrer AndroidManifest.xml. Dies teilt dem System mit, welche Konfigurationsänderungen Sie selbst vornehmen werden – in diesem Fall, indem Sie nichts tun.

<activity android:name="MainActivity"
     android:screenOrientation="portrait"
     android:configChanges="keyboardHidden|orientation">

Siehe Entwicklerreferenz Konfigurationsänderungen für mehr Details.

Ihre Anwendung kann jedoch jederzeit unterbrochen werden, z. B. durch einen Anruf. Daher sollten Sie wirklich Code hinzufügen, um den Status Ihrer Anwendung zu speichern, wenn sie angehalten wird.

Aktualisieren: Ab Android 3.2 müssen Sie auch “screenSize” hinzufügen:

<activity
    android:name="MainActivity"
    android:screenOrientation="portrait"
    android:configChanges="keyboardHidden|orientation|screenSize">

Aus dem Entwicklerhandbuch Behandeln Sie die Konfigurationsänderung selbst

Achtung: Ab Android 3.2 (API-Level 13) ändert sich die „Bildschirmgröße“ auch, wenn das Gerät zwischen Hoch- und Querformat wechselt. Wenn Sie also bei der Entwicklung für API-Ebene 13 oder höher (wie von den Attributen minSdkVersion und targetSdkVersion deklariert) Runtime-Neustarts aufgrund von Ausrichtungsänderungen verhindern möchten, müssen Sie den Wert „screenSize“ zusätzlich zum Wert „orientation“ einschließen. Das heißt, Sie müssen deklarieren
android:configChanges="orientation|screenSize". Wenn Ihre Anwendung jedoch auf API-Ebene 12 oder niedriger abzielt, verarbeitet Ihre Aktivität diese Konfigurationsänderung immer selbst (diese Konfigurationsänderung startet Ihre Aktivität nicht neu, selbst wenn sie auf einem Gerät mit Android 3.2 oder höher ausgeführt wird).

  • Nur um dies hinzuzufügen und wirklich deutlich zu machen, Android kann Ihre Anwendung jederzeit gnadenlos beenden, unabhängig von Ausrichtungsänderungen, also sollten Sie onPause() und onSaveInstanceState() verwenden, um den Zustand zu speichern, egal was passiert.

    – Eric Mill

    3. Oktober 2009 um 3:11 Uhr

  • Das 3.2-Update war sehr nützlich und blockierte mich. Ich hatte keine Ahnung, warum mein onConfigurationChanged-Handler nicht ausgelöst wurde, und das war es. Danke!

    – süsses limmer

    16. April 2012 um 7:31 Uhr


  • Der dritte Parameter – screenSize kann in 2.3.x nicht gefunden werden, sollte ich zu screenLayout wechseln?

    – toter Fisch

    23. April 2012 um 10:45 Uhr

  • @Lumma Nein, “screenSize” wird nur für Android 3.2 und neuer benötigt. Auf welche API-Ebene zielen Sie ab? Ich denke, Sie müssen es nur hinzufügen, wenn Sie Level 13 oder höher anstreben. Ich werde die Antwort aktualisieren, um sie zu verdeutlichen.

    – Verwicklungen

    23. April 2012 um 14:19 Uhr

  • Nur für den Fall, dass es für andere hilfreich ist, habe ich gefunden, dass Sie sowohl <...android:configChanges="orientation"...> Änderungen überschreiben als auch <...android:screenOrientation="portrait"...> können Voreinstellung definieren.

    – Sogger

    15. Februar 2013 um 22:38 Uhr


1646643789 61 Wie deaktiviere ich die Ausrichtungsanderung auf Android
überschmekel

Sie müssen AndroidManifest.xml als Intrications (zuvor Ashton) erwähnt ändern und sicherstellen, dass die Aktivität das onConfigurationChanged-Ereignis so verarbeitet, wie Sie es möchten. So sollte es aussehen:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

  • Wie von Dmitry Zaitsev bemerkt, ist es besser, die zu setzen setRequestedOrientation() in onCreate().

    – Timmm

    11. September 2012 um 9:25 Uhr

  • Nicht onConfigurationChanged() vorher angerufen werden onCreate() Wenn dies der Fall ist, legen Sie die Ausrichtung fest, bevor Sie contentViews in oncreate festlegen besser Ansatz, Einstellungskonfiguration, wo sie hingehört, ist auch Reiniger Diese Antwort steht also immer noch gut.

    – Samuel

    2. September 2013 um 2:19 Uhr


Ich habe immer festgestellt, dass Sie beides brauchen

android:screenOrientation="nosensor" android:configChanges="keyboardHidden|orientation"

1646643790 754 Wie deaktiviere ich die Ausrichtungsanderung auf Android
Dmitri Zaytsev

Wie gesagt eingestellt android:configChanges Ihrer Aktivität (in der Manifestdatei) an keyboardHidden|orientation und dann:

1) Überschreiben onConfigurationChanged()

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    //here you can handle orientation change
}

2) Fügen Sie diese Zeile zu Ihrer Aktivität hinzu onCreate()

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Es ist besser, als dieselbe Zeile hinzuzufügen onConfigurationChangedda Ihre App in den Hochformatmodus und dann wieder in das Querformat wechselt (dies geschieht nur einmal, ist aber ärgerlich).

Auch Sie können einstellen android:screenOrientation="nosensor" für Ihre Tätigkeit (im Manifest). Aber Auf diese Weise können Sie mit Orientierungsänderungen überhaupt nicht umgehen.

Benutze das..

    android:screenOrientation="portrait"

Wie deaktiviere ich die Ausrichtungsanderung auf Android
Ziffer

Verwenden Sie in der OnCreate-Methode Ihrer Aktivität diesen Code:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Jetzt wird Ihre Ausrichtung auf Hochformat eingestellt und ändert sich nie.

1646643791 867 Wie deaktiviere ich die Ausrichtungsanderung auf Android
Peter Mortensen

Fügen Sie in der Datei AndroidManifest.xml für jede Aktivität, die Sie sperren möchten, die letzte hinzu screenOrientation Linie:

android:label="@string/app_name"
android:name=".Login"
android:screenOrientation="portrait" >

Oder android:screenOrientation=”Landschaft”.

964620cookie-checkWie deaktiviere ich die Ausrichtungsänderung auf Android?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy