2010-07-25 8 views
69

Ich habe eine App, die nur im Hochformat funktioniert, und ich habe die Änderungen in meiner Manifest-Datei für jede Aktivität die Ausrichtung auf Hochformat vorgenommen. Aber wenn ich das Gerät rotiere, wird die Aktivität erneut erstellt. Wie kann man die Aktivität nicht zerstören?Android, wie kann ich die Aktivität nicht zerstören, wenn ich das Gerät drehe?

+1

Dies wird empfohlen, oft gegen Sie Ihre Anwendungen Ausrichtung programmatisch mit so etwas wie Einstellung versuchen könnte: setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); – stealthcopter

+7

Warum würde es gegen sein? Nehmen wir an, wir haben einen Dienst, der 2 Sekunden dauert. Wenn die Aktivität jedes Mal zerstört wird, läuft dieser Dienst jedes Mal weiter, während ich ihn nur einmal ausführen muss. –

Antwort

114

Für API 12 und unter:

android:configChanges="orientation" 

Add "Bildschirmgröße" hinzufügen, wenn Sie API sind Targeting-13 oder über, weil, wenn die Orientierung ändert so auch Ihre Bildschirmgröße, sonst neue Geräte werden auch weiterhin um deine Aktivität zu zerstören. Siehe Egg Antwort unten für weitere Informationen zur Verwendung von „Bildschirmgröße“

android:configChanges="orientation|screenSize" 

auf Ihre Aktivität in AndroidManifest.xml. Auf diese Weise wird Ihre Aktivität nicht automatisch neu gestartet. Weitere Informationen finden Sie unter the documentation

+0

Die Aktivität wird erneut gestartet. Ich weiß nicht, was ist der Punkt, all die Dinge zu tun, die getan werden müssen, wenn die Aktivität rotiert, auch wenn es nicht virtuell rotiert. Gibt es eine Möglichkeit, die Meldungen zu deaktivieren, die der Sensor an das Betriebssystem über die Rotation oder so etwas sendet, um dieses Problem von seiner Wurzel aus zu beheben? – Vasil

+6

auf welchem ​​Gerät programmieren Sie? Denken Sie daran, dass zum Beispiel das Herausgleiten der Tastatur auch Ihre Aktivität neu starten könnte ... (wenn das der Grund ist, confChanges auf "keyboardHidden | orientation" zu setzen) –

+1

dies ist die richtige Antwort Vielen Dank –

100

Aus dem offiziellen Dokument flurin sagte

Hinweis: Wenn Ihre Anwendung API-Level 13 oder höher Ziele (wie erklärt durch die minSdkVersion und targetSdkVersion Attribute), dann sollten Sie auch die „Bildschirmgröße erklären "Konfiguration, weil sich auch ändert, wenn ein Gerät zwischen Hoch- und Querformat wechselt.

Also, wenn Sie Ihre App Ziele API Level 13 oder höher, können Sie diese Konfiguration gesetzt sollte stattdessen:

android:configChanges="orientation|screenSize"

+4

Vielen Dank! Alle anderen Antworten verpassen diesen Teil, wo API-Level 13 dieses screenSize-Ding einführt. Sie haben gerade mein Leben gerettet! :) –

+1

@egg Danke duuuuuuu! :) Das hat geholfen! – KarenAnne

+0

vielen dank @egg. Ich habe mit diesem ... – sampath

8

Die richtige Lösung ist

android: configChanges = "Orientierung | Bildschirmgröße"

Android Dokumentation:

Die aktuell verfügbare Bildschirmgröße hat sich geändert. Dies stellt eine Änderung der derzeit verfügbaren Größe relativ zum aktuellen Seitenverhältnis dar und ändert sich daher, wenn der Benutzer zwischen Hoch- und Querformat wechselt. Wenn Ihre Anwendung jedoch auf die API-Stufe 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 Android 3.2- oder höherem Gerät ausgeführt wird).

-1

schreiben in manifest:

android:configChanges="orientation|screenSize|keyboardHidden" 

und diese in der Aktivität außer Kraft setzen, die Ihr Problem gelöst:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
} 
+1

Warum sollte die onConfigurationChanged-Methode überschrieben und die ursprüngliche Implementierung aufgerufen werden, um etwas Nützliches zu tun? – ricosrealm

0

ich dies für eine etwas war in Unordnung und relized dann, dass in der Manifest-Datei Ich habe die configChanges auf der Anwendungsebene und nicht auf der Aktivitätsebene gesetzt. Hier ist, wie der Code aussieht, wenn er für mich richtig funktioniert.

Image of correct manifest files code

+1

Sie sollten Code in Ihrem Beitrag anstelle eines Bildes teilen. –

+0

Bitte ** [bearbeiten] ** Ihre Post und zeigen Sie den tatsächlichen Manifest-Code als Text anstelle von Screenshots. Andere können Ihre Bilder nicht kopieren und einfügen. [Siehe hier] (https://meta.stackoverflow.com/a/285557/1402846) für Details. Vielen Dank. – Pang

Verwandte Themen