2012-05-31 6 views
12

En mi manifiesto he configurado una actividad restringida a orientación vertical. Pero necesito eliminar esta restricción a condición. Entonces, ¿cómo logro eliminar las restricciones de orientación programáticamente?Eliminar restricciones de orientación programáticamente

UPD: mis ajustes actuales son:

<activity 
     android:name=".activity.MainActivity" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar" 
     android:screenOrientation="portrait" 
     android:configChanges="orientation"> 


/** 
* Defines whether the device being used is a tablet and if so adds horizontal orientation option. 
*/ 
    protected void _updateScreenOrientationModes(){ 
     if(((MyApplication) getApplication())._isTablet == true) 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
     } 

Respuesta

18

Aun cuando no se haya establecido android:screenOrientation en su Manifiesto, se puede establecer mediante programación la orientación con Activity.setRequestedOrientation().

En esencia, "la eliminación de la restricción" se lleva a cabo por

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

después de lo cual la actividad se exhiben el comportamiento predeterminado de cambio de orientación de la pantalla cuando cambia la orientación dispositivo físico.

Es probable, sin embargo, que desee realmente coincidir con la orientación actual del dispositivo físico al mismo tiempo. No lo he intentado, pero estoy bastante seguro de que si todo lo que hiciste fue lo anterior, si el dispositivo estaba físicamente en orientación horizontal cuando lo hiciste, entonces permanecerías en modo vertical hasta que movieras físicamente el dispositivo al retrato y de vuelta al paisaje.

Lo que haría sería asegurar android:configChanges="orientation" en su Manifiesto y anular Activity.onConfigurationChanged(), en el que puede, según su condición, realizar el cambio de orientación o guardar en caché la orientación. Luego, cada vez que cambie su condición, tendrá la orientación física actual a mano para que pueda cambiarla en ese punto si es necesario.

+0

Lo he pensado también :). Pero el método con UNSPECIFIED no funciona. – user1384991

+0

Definitivamente funciona para mí en bastantes dispositivos. ¿Estás seguro de que estás llegando a la llamada a setRequestedOrientation()? –

+0

bien, funcionó - gracias – user1384991

1

programación puede cambiar sus orientaciones de la pantalla mediante el uso de "setRequestedOrientation()"

En su clase java escribir el siguiente código como por su condición requiere. ....

para cambiar al modo de retrato, utilizar la constante ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

Para cambiar al modo vertical, utilice la constante ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
+0

Quise eliminar la restricción para permitir que Android decida qué orientación usar, así que si tengo un retrato definido en Manifiesto, pero necesito eliminar esta restricción, no está claro a qué orientación de parámetro se debe establecer, el usuario podría estar sosteniendo su dispositivo tanto en orientación horizontal como vertical - ¿cómo puedo definir cuál se usa? .Necesito permitir que las tabletas tengan orientaciones y dispositivos solo retratos. Respecto a su respuesta: cuando un usuario de tableta inicia la aplicación, ¿cómo defino su * * manteniendo ** orientación y establecer el diseño para apropiado? – user1384991

+0

Además, me temo que este método no permite ambas orientaciones ya que restringe por una particular. Lo he intentado hasta ahora SCREEN_ORIENTATION_UNSPECIFIED pero en vano – user1384991

+1

Funciona la siguiente PANTALLA-ORIENTACIÓN-NO ESPECIFICADA, la usé. lo que sea que represente en su manifiesto, si especifica esta llamada NO ESPECIFICADA en su código java significa que de forma predeterminada se mostrará en modo vertical. –

2

Voy a dejar mi otra respuesta, ya que aborda la pregunta más general que usted hizo. Sin embargo, en un comentario a otra persona que ha dicho:

Me es posible tabletas que tengan ambas orientaciones y los terminales único retrato

su caso en particular es en realidad más fácil que el caso general: Retire ambos android:screenOrientation="portrait" y android:configChanges="orientation" de su Manifiesto para permitir el comportamiento predeterminado. Luego, durante el arranque, si el dispositivo es un teléfono, la fuerza de orientación vertical con

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Dispositivo obviamente nunca va a cambiar entre ser una tableta o un teléfono en tiempo de ejecución, por lo que sólo necesita hacer esto una vez, en el inicio . Las tabletas obtendrán el comportamiento predeterminado, por lo que cualquiera que sea la orientación física en que se encuentre el dispositivo, eso es lo que usarán. Los teléfonos se forzarán en el retrato y se mantendrán de esa manera.

Cuestiones relacionadas