Aquí un pseudo código para detectar la rotación de pantalla evento, y decidir conservar o cambios en la orientación de la pantalla.

public boolean onOrientationChanges(orientation) {
  if(orientation == landscape)
    if(settings.get("lock_orientation"))
      return false;   //Retain portrait mode
    else
      return true; //change to landscape mode

  return true; 
}

¿Cómo puedo hacer cosas similares en Android?

EDICIÓN:
De hecho estoy buscando respuesta en Donde para manejar los cambios de orientación de la. No quiero arreglar la orientación mediante la adición de screenOrientation=»retrato».

Necesito algo, similar a onConfigurationChanges(), donde lo puedo controlar la orientación, pero no me necesitan manualmente volver a dibujar la vista.

  • Usted no necesita interceptar la petición y, a continuación, permitir o negar. Puede bloquear o liberar la orientación de antemano. También hay más opciones con este método, tales como permitir una rotación de 180 grados cuando está bloqueado. Por favor, lea mi respuesta a continuación, en lugar de la opción seleccionada.
InformationsquelleAutor Yong Fei | 2012-02-29

6 Comentarios

  1. 45

    Usted necesita un Display instancia en primer lugar:

    Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

    A continuación, la orientación puede ser llamado como este:

    int orientation = display.getOrientation();

    De verificación de orientación como de su forma y el uso de esta para cambio de orientación:

    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    Espero te sirva de ayuda.

    Actualización:

    Bueno, digamos que tienes un oAllow var que es Boolean y el valor predeterminado es False.

    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        int orientation = display.getOrientation(); 
        switch(orientation) {
            case Configuration.ORIENTATION_PORTRAIT:
                if(!oAllow) {
                        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
                break;
            case Configuration.ORIENTATION_LANDSCAPE:
                if(!oAllow) {
                        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
                break;
        }
    }

    Puedes añadir más opciones.

    No me trate de esta muestra, pero al menos explica algunas pistas sobre cómo resolver. Dime si tienes cualquier error.

    ACTUALIZACIÓN

    getOrientation() ya está obsoleto ver aquí. En Lugar De Utilizar getRotation(). Para comprobar si el dispositivo está en el modo de paisaje se puede hacer algo como esto:

    Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
            .getDefaultDisplay();
    
    int orientation = display.getRotation();
    
    if (orientation == Surface.ROTATION_90
            || orientation == Surface.ROTATION_270) {
        //TODO: add logic for landscape mode here            
    }
    • gracias, pero ¿dónde debo poner el código? Me refiero a que evento/función que se desencadena cuando la orientación es cambiado?
    • Simplemente, ¿qué quieres hacer? Dar más detalle. ¿Se necesita para controlar la orientación o qué? Voy a actualizar mi respuesta.
    • Antes de que el dispositivo de cambio de la orientación, los necesito para determinar si el modo de paisaje es permitido, en tiempo de ejecución. Digamos que si el usuario ha paisaje modo de apagado, la aplicación permanecerá en el modo de retrato.
    • Actualizado a mis preguntas. Necesito saber donde para controlar la orientación durante el tiempo de ejecución
    • Actualizado mi respuesta, echa un vistazo y decirme acerca de resultado por favor.
    • lo siento onOrientationChanges es mi pseudo código, no hay evento de este tipo en android. Estoy buscando ese trozo de código que podría reemplazar onOrientationChanges
    • Sí, lo siento por mi negligencia. Creo que overrided método tiene que ser onConfigurationChanged de acuerdo a estas respuestas: stackoverflow.com/a/1512263/1033899 y stackoverflow.com/a/5200226/1033899
    • gracias, por favor, actualice su respuesta para que yo pueda aceptar 🙂
    • Actualizado por última vez, espero.
    • Hola.. si usted está haciendo algún tipo de acción basado en el diseño.. durante la orientación. Este enfoque no será mucho más útil
    • pantalla.getOrientation(); es depricated. Intente utilizar getResources().getConfiguration().orientación
    • Usted no necesita interceptar la petición y, a continuación, permitir o negar. Puede bloquear o liberar la orientación de antemano. También hay más opciones con este método, tales como permitir una rotación de 180 grados cuando está bloqueado. Por favor, lea mi respuesta a continuación.
    • También La Superficie.ROTATION_90 es relativa a la natural rotación de la pantalla, por lo que podría ser horizontal o vertical, dependiendo del dispositivo.

  2. 18

    Intente ejecutar

    getResources().getConfiguration().orientation

    De su contexto objeto de averiguar cuál es la orientación de la pantalla en tiempo de ejecución, los valores posibles son documentados aquí

    Con el fin de atrapar el cambio de la orientación de evento que usted puede encontrar la respuesta en el Android Dev Guía: El manejo del Cambio en la Configuración usted Mismo

    De la guía :

    Por ejemplo, el siguiente manifiesto de código declara una actividad que
    se encarga tanto de la orientación de la pantalla cambie de teclado y disponibilidad
    cambio:

    <actividad de android:name=».MyActivity»

    android:configChanges=»orientación|keyboardHidden»

    android:label=»@string/app_name»>

    Ahora, cuando una de estas configuraciones cambio, MyActivity no se reinicia. En su lugar, el MyActivity recibe una llamada a onConfigurationChanged(). Este método se le pasa un objeto de Configuración que especifica la nueva configuración del dispositivo. Mediante la lectura de los campos en la Configuración, se puede determinar la nueva configuración y hacer los cambios apropiados mediante la actualización de los recursos utilizados en su interfaz. En el momento en que se llama a este método, su actividad es objeto de Recursos se actualiza a la devolución de los recursos basados en la nueva configuración, así que usted puede restablecer fácilmente los elementos de la interfaz de usuario sin el sistema de reiniciar su actividad.

    • Hola, he actualizado mi pregunta. Sé cómo recuperar la orientación de la pantalla, necesito saber DONDE se maneja.
    • Hola, echa un vistazo a la última enlace en mi respuesta… el Manejo del cambio de configuración de ti mismo. He editado mi respuesta con algo más de información
  3. 3
    if (this.getWindow().getWindowManager().getDefaultDisplay()
        .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
      //portrait mode
    } else if (this.getWindow().getWindowManager().getDefaultDisplay()
               .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
      //landscape
    }
  4. 1

    No es necesario interceptar el evento y, a continuación, reemplazar. Sólo tiene que utilizar:

    //Allow rotation
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
    //Lock rotation (to Landscape)
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE);

    Puntos a tener en cuenta aquí que, si en Jellybean y por encima de esto va a permitir una rotación de 180 grados cuando está bloqueado. También cuando se desbloquee este sólo permite la rotación si el maestro del usuario configuración es para permitir la rotación. Usted puede prohibir 180 grados de rotación y anular la configuración maestra y permitir la rotación, y mucho más, así que echa un vistazo a las opciones en ActivityInfo

    Además, si usted tiene pre-establecido que no hay rotación, entonces su actividad no será destruido, y, a continuación, reiniciar, sólo para usted, para establecer la orientación de la espalda que causará que la actividad se reinicia; Así lo desea por adelantado puede ser mucho más eficiente.

    Pre Jellybean uso ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE — no hay rotación de 180 grados con esto.

  5. 0

    Comprobar tu android orientación de la pantalla en tiempo de ejecución:

    ListView listView = (ListView) findViewById(R.id.listView1);
    if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
        //do work for landscape screen mode.
        listView.setPadding(0, 5, 0, 1);
    } else if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
        //Do work for portrait screen mode.
        listView.setPadding(1, 10, 1, 10);
    }
  6. 0

    Otra solución para determinar la orientación de la pantalla:

    public boolean isLandscape() {
        return Resources.getSystem().getDisplayMetrics().widthPixels - Resources.getSystem().getDisplayMetrics().heightPixels > 0;
    }

Dejar respuesta

Please enter your comment!
Please enter your name here