Ich habe eine Anwendung, die ich nur im Hochformat verwenden möchte, also habe ich android definiert: screenOrientation = "Porträt" im Manifest XML. Dies funktioniert für das HTC Magic- Telefon in Ordnung (und verhindert Orientierungsänderungen auch bei anderen Telefonen).
Ich habe jedoch ein Problem mit dem HTC G1- Telefon, da ich die Hardware- QWERTZ-Tastatur (nicht die virtuelle Tastatur) öffne . Meine Aktivität bleibt im Hochformat, aber sie scheint neu gestartet zu werden und verliert alle ihre Zustände. Dies ist bei der HTC Hero- Version nicht der Fall .
Meine Anwendung ist ziemlich groß, daher möchte ich nicht, dass sie neu gestartet wird und beim Öffnen der Tastatur alle Status verliert. Wie kann ich das verhindern?
android
android-activity
android-orientation
Vidar Vestnes
quelle
quelle
Antworten:
Update April 2013: Tu das 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 folgenden Gründen:
Vermeiden Sie das Nachladen von Aktivitäten mit Asynctask bei Orientierungsänderungen in Android
Fügen Sie
android:configChanges="keyboardHidden|orientation"
zu Ihrer AndroidManifest.xml hinzu. Dies teilt dem System mit, welche Konfigurationsänderungen Sie selbst vornehmen werden - in diesem Fall, indem Sie nichts tun.Weitere Informationen finden Sie in der Entwicklerreferenz configChanges .
Ihre Anwendung kann jedoch jederzeit unterbrochen werden, z. B. durch einen Telefonanruf. Sie sollten daher unbedingt Code hinzufügen, um den Status Ihrer Anwendung zu speichern, wenn diese angehalten wird.
Update: Ab Android 3.2 müssen Sie auch "screenSize" hinzufügen:
Im Entwicklerhandbuch Umgang mit der Konfiguration Ändern Sie sich
quelle
Sie müssen AndroidManifest.xml modifizieren , wie Intrications (vorher Ashton) erwähnt und stellen Sie sicher , dass die Aktivität Griffe der onConfigurationChanged Veranstaltung , wie Sie wollen , dass es behandelt. So sollte es aussehen:
quelle
setRequestedOrientation()
in zu setzenonCreate()
.onConfigurationChanged()
vorher nicht aufgerufen,onCreate()
wenn das Festlegen der Ausrichtung vor dem Festlegen von contentViews in oncreate besser ist. Das Festlegen der Konfiguration dort, wo sie hingehört , ist auch sauberer, sodass diese Antwort immer noch gut ist.Ich habe immer festgestellt, dass Sie beides brauchen
quelle
Wie gesagt, setzen Sie
android:configChanges
Ihre Aktivität (in Manifestdatei) aufkeyboardHidden|orientation
und dann:1) Überschreiben
onConfigurationChanged()
2) Fügen Sie diese Zeile zu Ihrer Aktivität hinzu
onCreate()
Es ist besser, als dieselbe Zeile hinzuzufügen
onConfigurationChanged
, da Ihre App in den Hochformatmodus und dann wieder in den Querformatmodus wechselt (dies geschieht nur einmal, ist aber ärgerlich).Sie können auch
android:screenOrientation="nosensor"
für Ihre Aktivität festlegen (im Manifest). Auf diese Weise können Sie jedoch Orientierungsänderungen überhaupt nicht verarbeiten.quelle
Benutze das..
quelle
Verwenden Sie in der OnCreate-Methode Ihrer Aktivität diesen Code:
Jetzt wird Ihre Ausrichtung auf Hochformat eingestellt und ändert sich nie.
quelle
Fügen Sie in der Datei AndroidManifest.xml für jede Aktivität, die Sie sperren möchten, die letzte
screenOrientation
Zeile hinzu:Oder android: screenOrientation = "Landschaft" .
quelle
In Ihrer androidmanifest.xml- Datei:
oder
quelle
Um den Bildschirm per Code zu sperren, müssen Sie die tatsächliche Drehung des Bildschirms (0, 90, 180, 270) verwenden und die natürliche Position kennen. Bei einem Smartphone ist die natürliche Position Porträt und bei einem Tablet. Es wird Landschaft sein.
Hier ist der Code (Sperr- und Entsperrmethoden), der auf einigen Geräten (Smartphones und Tablets) getestet wurde und hervorragend funktioniert.
quelle
In Visual Studio Xamarin:
using Android.Content.PM;
zu Ihnen Aktivitäts-Namespace-Liste.[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
als Attribut für Ihre Klasse, so:
quelle
Hinzufügen
zu deinem Manifest.
quelle
Bitte beachten Sie, dass keine der Methoden jetzt zu funktionieren scheint!
In Android Studio 1 besteht eine einfache Möglichkeit darin, etwas hinzuzufügen
android:screenOrientation="nosensor"
.Dadurch wird die Bildschirmausrichtung effektiv gesperrt.
quelle