2011-01-13 18 views
125

Duplicar posible:
How to disable orientation change in Android?orientación de bloqueo de pantalla (Android)

Estoy escribiendo una aplicación para Android que utiliza pestañas con diferentes contenidos (actividades). En una de estas actividades, me gustaría bloquear la orientación de la pantalla en el modo "Horizontal", pero en las demás actividades, quiero la orientación normal (de acuerdo con el sensor).

Lo que estoy haciendo ahora es que estoy llamando

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

cuando cambio a la actividad de modo horizontal, y

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 

cuando cambio de nuevo a las otras actividades. Sin embargo, esto no parece funcionar, toda la aplicación se bloquea. ¿Cuál es el enfoque normal de este problema?

+14

El enlace "Posible duplicado" es ** no ** una pregunta duplicada a este. Esta pregunta es cómo ** bloquear la orientación ** para que no pueda cambiar de paisaje. La pregunta vinculada pregunta cómo ** evitar que la aplicación se reinicie ** cuando cambie la orientación. – Kent

+0

Esto parece ser lo que desea: llame a 'Screen.lockOrientation (this)' y más tarde 'Screen.unlockOrientation (this)' de https://github.com/delight-im/Android-BaseLib/blob/master/Source /src/im/delight/android/baselib/Screen.java – caw

+0

Solo una advertencia, si está utilizando ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT en línea, esto no está permitido por debajo de 4.3. A continuación, puede utilizar la información anterior o ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT – Akshay

Respuesta

218

En el Manifiesto, puede establecer screenOrientation en horizontal. Se vería algo como esto en el XML:

<activity android:name="MyActivity" 
android:screenOrientation="landscape" 
android:configChanges="keyboardHidden|orientation|screenSize"> 
... 
</activity> 

Dónde MyActivity es el que desea permanecer en el paisaje.

La línea android:configChanges=... impide que se llame a onResume(), onPause() cuando se gira la pantalla. Sin esta línea, la rotación se mantendrá como lo solicitó, pero las llamadas seguirán realizándose.

Nota: keyboardHidden y orientation son necesarios para < Android 3.2 (API nivel 13), y se requieren las tres opciones 3.2 o superior, no sólo orientation.

+0

Parece que no funciona; ¿Me estoy perdiendo de algo? – user573536

+3

Mmm, sí, tienes razón en que no parece funcionar si la actividad se ejecuta dentro de un TabHost. Creo que puede tener la idea correcta usando 'setRequestedOrientation', pero intente poner la llamada en' onResume', * not * 'onCreate', y en la Actividad no ajena use' ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED' en lugar de 'SENSOR'. Mi emulador también se desconectó con el sensor, pero no se ha especificado –

+0

hay alguna forma de orientación definida para el servicio ... básicamente escribo un servicio de LiveWallpaper ... donde es necesario restringir la orientación del dispositivo. – CoDe

52

Tuve un problema similar.

cuando entré

<activity android:name="MyActivity" android:screenOrientation="landscape"></activity> 

En el archivo de manifiesto esto hizo que la actividad para que aparezca en el paisaje. Sin embargo, cuando volví a las actividades anteriores, se mostraban en paisaje a pesar de que estaban configuradas para retratos. Sin embargo, al agregar

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

inmediatamente después de que la sección OnCreate de la actividad de destino resolviera el problema. Entonces ahora uso ambos métodos.

+1

Solo una advertencia, si está utilizando ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT, esto no está permitido por debajo de 4.3. A continuación, puede usar la información anterior o ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT – Akshay

+0

Advertencia: el uso de setRequestedOrientation() hará que la actividad se reinicie, lo que activará onResume, etc. dos veces. Agregue esto a su manifiesto para cada actividad en la que haga esto para evitarlo: android: configChanges = "keyboardHidden | orientation | screenSize" – bluehallu

27

dentro del archivo de manifiesto de Android de su proyecto, encontramos la declaración de actividad de cuyos desea fijar la orientación y añadir el siguiente fragmento de código,

android:screenOrientation="landscape" 

para la orientación horizontal y para el retrato añadir el siguiente código ,

android:screenOrientation="portrait" 
Cuestiones relacionadas