Es posible simple para detectar la orientación actual de un dispositivo android, sin necesidad de programar un oyente y el manejo de la matriz de posición?
En mi aplicación solo quiero saber actual de la orientación vertical u horizontal – en el momento. Sin embargo, no quiero escuchar a los eventos de axiometry u otros eventos.

InformationsquelleAutor Mark | 2011-02-25

7 Comentarios

  1. 65

    Utilizar el getRotation método:

    Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    int rotation = display.getRotation();

    De la documentación:

    Devuelve la rotación de la pantalla de su «natural» de la orientación. El valor devuelto puede ser Surface.ROTATION_0 (sin rotación), Surface.ROTATION_90, Surface.ROTATION_180, o Surface.ROTATION_270. Por ejemplo, si un dispositivo tiene una forma natural de altura de la pantalla, y el usuario ha cambiado su lado para ir a una orientación horizontal, el valor devuelto aquí puede ser Surface.ROTATION_90 o Surface.ROTATION_270 dependiendo de la dirección en que se fue. El ángulo de la rotación de los gráficos dibujados en la pantalla, que es la dirección opuesta a la de la física de la rotación del dispositivo. Por ejemplo, si el dispositivo se gira 90 grados en sentido antihorario, para compensar la representación será girado 90 grados en sentido horario y por lo tanto el valor devuelto aquí será Surface.ROTATION_90.

    Tenga en cuenta que getRotation se introdujo a partir de Android 2.2. Uso getOrientation si tu objetivo son los dispositivos más antiguos.

    • hizo el trabajo, si el usuario apaga la rotación? Por ejemplo, he apagado la rotación, así que mi escritorio orientación es siempre vertical, pero la aplicación de la cámara, gire la vista previa independientes de esta configuración.
    • Esto funciona en mi teléfono Galaxy S3, pero NO en mi de 10 pulgadas de tablet emulador con Android 4.3: getRotation() devuelve exactamente opuesta a la rotación de la real (horizontal – vertical)!
    • Puede ser su tablet emulador de partida de la orientación es vertical por lo que este código le da exactamente lo contrario a los resultados. Siga biegleux la respuesta de lugar
  2. 67

    También puede utilizar:

    getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE
    • Sé que esto es un poco de un post anterior, pero en caso de que uno está trabajando con una brújula, el dispositivo debe saber exactamente la rotación para añadir o restar el valor correcto para obtener el correcto de los rodamientos, por lo que su respuesta no es la mejor, pero todavía útil.
    • Esto funciona en teléfonos y tabletas.
    • Esto no funciona en el Samsung Galaxy S5. La mejor solución es Cristian de la respuesta.
  3. 2

    Creo que la más segura y más fácil es añadir una etiqueta a algún elemento de su actividad en XML. Por ejemplo, establezca el viewpager la etiqueta de «retrato» en el diseño vertical y se ajusta a «paisaje» en el paisaje. A continuación, en el oncreate de comprobar que la etiqueta así:

    if(mViewpager.getTag().equals("portrait"))
      //is in portrait
    else
      //is in landscape
  4. 1

    Usted sólo necesita saber la altura y la anchura de tu lienzo… su superficie… a tu monitor, etc…

    tal vez usted puede conseguir con :

    if (canvas.getHeight()>canvas.getWidth() ) {
    //portrait
    }
    else
    {
    //landscape
    }
    • bueno, yo no dependería de una cosa. Lo canvas es esto? Es en un diseño, cuáles son sus parámetros de diseño y que utiliza el diseño en qué situaciones… demasiadas preguntas con una ‘W’ para una funcionalidad que parece bastante hardware-bound.
  5. 1

    Usted podría hacer una extensión de la función desde el código anterior:

    fun AppCompatActivity.getRotation(): Int{
        val display = (baseContext.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
        val rotation = display.rotation
        when(rotation){
            Surface.ROTATION_90 -> return R.integer.LANDSCAPE
            Surface.ROTATION_270 -> return R.integer.LANDSCAPE
            Surface.ROTATION_180 -> return R.integer.PORTRAIT
            Surface.ROTATION_0 -> return R.integer.PORTRAIT
            else ->
                return R.integer.PORTRAIT
        }
    }

    En su directorio de recursos para crear un constants.xml archivo con el siguiente contenido:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <integer name="LANDSCAPE">0</integer>
        <integer name="PORTRAIT">1</integer>
    </resources>
    

    Que el código es tan fácil como (por ejemplo, vertical /horizontal de diseño para un Recyclerview en un Fragmento:

    val a  = activity as AppCompatActivity
            val orientation = a.getRotation()
            when (orientation){
                R.integer.PORTRAIT -> rv.layoutManager = LinearLayoutManager(activity, RecyclerView.VERTICAL,false)
                R.integer.LANDSCAPE -> rv.layoutManager = LinearLayoutManager(activity, RecyclerView.HORIZONTAL,false)
            }
  6. 0

    Esto puede no ser relevante, pero si por casualidad usted necesita saber esto porque desea bloquear el dispositivo en su orientación actual puede alternar entre las siguientes dos líneas de código.

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);

Dejar respuesta

Please enter your comment!
Please enter your name here