2010-05-14 21 views
14

Quiero crear una casilla de verificación en mi preferencia Actividad que permite al usuario alternar el cambio de orientación.¿Cómo se activa el bloqueo de orientación en Android?

En preguntas similares, las personas solo escriben sobre el bloqueo de orientación completo (anulando el método ChangeChanged o agregando configChanges en AndroidManifest.xml) o aplicando la orientación (mediante setRequestedOrientation).

¿Hay alguna manera de alternar el bloqueo de orientación?


EDIT: He creado un método que establece la orientación preferente a uno de tres estados: paisaje, de retrato y sensores. Este método se usa junto con la orientación de recuperación getResources().getConfiguration().orientation) y guardando la orientación recuperada en las preferencias. Luego, en la actividad que necesita bloquear la orientación, disparo este método con la orientación preferida de las preferencias.

private static void setActivityOrientation(Activity activity, int preferenceOrientation) { 
    if (preferenceOrientation == Configuration.ORIENTATION_LANDSCAPE) { 
     if(activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){ 
     // You need to check if your desired orientation isn't already set because setting orientation restarts your Activity which takes long 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
     } 
    } else if (preferenceOrientation == Configuration.ORIENTATION_PORTRAIT) { 
     if(activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT){ 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     }  
    } else { 
     if(activity.getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_SENSOR){ 
      activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
     } 
    } 
} 

Respuesta

5

No entiendo cuál es el problema con setRequestedOrientation.

Las SCREEN_ORIENTATION_SENSOR se combinan con el paisaje o el retrato parece lo que quieres, ¿no?

if(....) 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
else if(....) 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
else if(....) 
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); 
+4

Lo que quiero lograr es un poco más complicado. Quiero poder bloquear la orientación. Ejemplo: si el usuario desea bloquear la orientación en mi aplicación, leo la orientación getResources(). GetConfiguration(). Luego disparo setRequestedOrientation para leer la orientación actual. Cuando quiere desactivar el bloqueo, simplemente establezco la orientación solicitada en ActivityInfo.SCREEN_ORIENTATION_SENSOR. Tu respuesta me ayudó a darme cuenta, así que lo acepto. – pixel

+0

@pixel ¿descubrió las orientaciones inversas? Estoy teniendo el mismo problema aquí: http://stackoverflow.com/questions/6599770/screen-orientation-lock –

Cuestiones relacionadas