2009-09-11 5 views
65

¿Hay alguna manera de hacer que una aplicación ignore completamente un cambio en la orientación de la pantalla?¿Cómo hacer que una aplicación ignore el cambio de orientación de la pantalla?

+0

Solo una nota que aparentemente en Android 1.5 hay un error. Si usa un tamaño de pantalla personalizado (por ejemplo, 800x480, como en el Apad) y lo fuerza al paisaje (ya sea a través de XML o del código), entonces estará de hecho en retrato. – Dornbi

+0

Puede llamar a 'Screen.lockOrientation (this)' desde https://github.com/delight-im/Android-BaseLib/blob/master/Source/src/im/delight/android/baselib/Screen.java si Desea bloquear y desbloquear la orientación del código (que es más flexible) – caw

Respuesta

58

Es posible, con bastante facilidad, anular el comportamiento predeterminado y prohibir que cambie la orientación de la pantalla cuando el teclado está abierto/cerrado.

Modificar el manifiesto

Abrir el manifiesto, cambie a la pestaña de aplicaciones y seleccione la actividad deseada que desea anular el comportamiento de cambio de orientación.

  1. atributos dentro necesita cambiar dos campos: orientación pantalla: Seleccione ya sea vertical u horizontal - cualquiera que se desee. Este será el diseño predeterminado.

  2. Seleccione eventos para los cambios de configuración que desea anular: En este caso, estos son keyboardHidden y orientación.

Modificación de la aplicación Actividad

Ahora tiene que anular una sola función dentro de la actividad deseada.

Solo agregue la siguiente función a la clase de su actividad.

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

Esta es la aplicación por defecto si se utiliza la opción de menú Source->Override/Implement Methods .

Eso es todo! Ahora su orientación siempre se mantendrá.

Recuerde que esta configuración es por Actividad, por lo que debe repetir este paso para cada actividad en la que desee prohibir el cambio de orientación.

(Basado en SDK 1.1)

+16

¿El simple hecho de llamar a la superclase no cambia nada? – Matthias

+0

Bueno ... Acabo de dar una receta que me funciona. –

+10

Estaba jugando con algo muy similar, creo que los cambios en el archivo Manifest son suficientes, al menos lo fueron para mí (lo que parece lógico, como señaló Matthias). –

26

Puede realizar el mismo cambio en el código con la siguiente línea (llamada en una actividad):

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

Una vez que haga esta llamada, la aplicación se mantendrá en modo de paisaje (o retrato). Puede usar la misma llamada (con una enumeración ActivityInfo diferente) para que sea sensible a la orientación cambiando de nuevo.

Hay un artículo completo de DevX sobre el tema en Developing Orientation-Aware Android Applications.

(ADVERTENCIA:. Desde que he publicado este enlace DevX ha puesto una pared de registro)

+0

Esta es la única respuesta que funcionó para mí con Android 2.2. ¡Gracias! –

14

puede definir su actividad en el archivo AndroidManifest.xml así:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="portrait" 
    android:configChanges="orientation|keyboardHidden|keyboard"/>` 

En este caso debe establecer la propiedad para cada actividad. No encontré una solución en línea para todas las aplicaciones.

19

Si va a configurar ya sea por AndroidManifest.xmlsetRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); o con el que se va a ejecutar en problemas con tabletas. Su orientación natural/predeterminada es el paisaje.

Si realmente quiere ignorar por completo la orientación de la pantalla cambia me gustaría utilizar este valor setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);. Hablo más sobre esto en Stack   Pregunta de desbordamiento Android natural sensor orientation help.

Aquí es el xml:

<activity 
    android:name=".MyActivity" 
    android:screenOrientation="nosensor" 
    android:configChanges="orientation|keyboardHidden|keyboard"/> 
+0

Esto no girará la pantalla. –

+1

No estoy seguro de seguir ... Ese es el punto, para evitar girar la pantalla. – bytebender

+0

"ignorar completamente los cambios de orientación de la pantalla" significa que cuando se gira, los datos permanecerán iguales. –

2
<activity android:screenOrientation="portrait"></activity> 
1

¿Quieres leer la orientación actual y mantener de esta manera a lo largo de toda la vida de la actividad, por lo que lo que hice es la siguiente, al final de onCreate :

// choose an orientation and stay in it 
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
else if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
2

añadir esto a la actividad:

android:configChanges="orientation|screenSize"

Cuestiones relacionadas