Tengo una aplicación que me gustaría usar en modo vertical, por lo que he definido android: screenOrientation = "portrait" en el XML manifiesto. Esto funciona bien para el HTC Magic teléfono (y también evita cambios de orientación en otros teléfonos).
Pero tengo un problema con el teléfono HTC G1 cuando abro el teclado QWERTY de hardware (no el teclado virtual). Mi actividad se mantiene en modo vertical, pero parece que se reinicia y pierde todos sus estados. Esto no sucede con el HTC Hero versión de .
Mi aplicación es bastante grande, así que no quiero que se reinicie y pierda todos sus estados cuando se abre el teclado. ¿Cómo puedo evitar eso?
android
android-activity
android-orientation
Vidar Vestnes
fuente
fuente
Respuestas:
Actualización de abril de 2013: no hagas esto. No fue una buena idea en 2009 cuando respondí la pregunta por primera vez y realmente no es una buena idea ahora. Vea esta respuesta de hackbod por razones:
Evite recargar la actividad con asinctask en el cambio de orientación en android
Agregue
android:configChanges="keyboardHidden|orientation"
a su AndroidManifest.xml. Esto le indica al sistema qué cambios de configuración va a manejar usted mismo, en este caso al no hacer nada.Consulte Configuración de referencia de desarrollador para más detalles.
Sin embargo, su aplicación puede ser interrumpida en cualquier momento, por ejemplo, por una llamada telefónica, por lo que realmente debe agregar código para guardar el estado de su aplicación cuando está en pausa.
Actualización: a partir de Android 3.2, también debe agregar "screenSize":
De la guía para desarrolladores Manejo de la configuración Cámbiese usted mismo
fuente
Debe modificar AndroidManifest.xml como se menciona en Intrications (anteriormente Ashton) y asegurarse de que la actividad maneja el evento onConfigurationChanged como desea que se maneje. Así es como debería verse:
fuente
setRequestedOrientation()
enonCreate()
.onConfigurationChanged()
se llama antesonCreate()
si es así, configurar la orientación antes de configurar contentViews en oncreate es un mejor enfoque, configurar la configuración a la que pertenece también es más limpio, por lo que esta respuesta sigue siendo buena.Siempre he encontrado que necesitas ambos
fuente
Como se dijo, establezca
android:configChanges
su Actividad (en archivo de manifiesto) enkeyboardHidden|orientation
y luego:1) anular
onConfigurationChanged()
2) Agregue esta línea a su actividad
onCreate()
Es mejor que agregar la misma línea
onConfigurationChanged
, porque su aplicación cambiará al modo vertical y luego volverá al paisaje (sucederá solo una vez, pero es molesto).También puede configurar
android:screenOrientation="nosensor"
su actividad (en manifiesto). Pero de esta manera no podrá manejar los cambios de orientación.fuente
Utilizar este..
fuente
En el método OnCreate de su actividad, use este código:
Ahora su orientación se establecerá en vertical y nunca cambiará.
fuente
En el archivo AndroidManifest.xml, para cada actividad que desee bloquear, agregue la última
screenOrientation
línea:O android: screenOrientation = "paisaje" .
fuente
En su archivo androidmanifest.xml :
o
fuente
Para bloquear la pantalla por código, debe usar la rotación real de la pantalla (0, 90, 180, 270) y debe conocer la posición natural de la misma, en un teléfono inteligente la posición natural será vertical y en una tableta, Será paisaje.
Aquí está el código (métodos de bloqueo y desbloqueo), se ha probado en algunos dispositivos (teléfonos inteligentes y tabletas) y funciona muy bien.
fuente
En Visual Studio Xamarin:
using Android.Content.PM;
a su lista de espacio de nombres de actividad.[Activity(ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
como un atributo para tu clase, así:
fuente
Añadir
a tu manifiesto.
fuente
Tenga en cuenta que ninguno de los métodos parece funcionar ahora.
En Android Studio 1, una forma simple es agregar
android:screenOrientation="nosensor"
.Esto bloquea efectivamente la orientación de la pantalla.
fuente