Verificar orientación en el teléfono Android

¿Cómo puedo comprobar si el teléfono Android está en Paisaje o Retrato?

18 Solutions collect form web for “Verificar orientación en el teléfono Android”

La configuración actual, tal como se utiliza para determinar qué recursos recuperar, etc., disponibles en el objeto Configuración de los recursos como:

getResources().getConfiguration().orientation 

http://developer.android.com/reference/android/content/res/Configuration.html#orientation

Si utiliza la orientación getResources (). GetConfiguration () en algunos dispositivos, obtendrá un error. Usamos ese enfoque inicialmente en http://apphance.com . Gracias al registro remoto de Apphance pudimos verlo en diferentes dispositivos y vimos que la fragmentación juega su papel aquí. Vi casos raros: por ejemplo alternando retrato y cuadrado (?!) en HTC Desire HD:

 CONDITION[17:37:10.345] screen: rotation: 270 orientation: square CONDITION[17:37:12.774] screen: rotation: 0 orientation: portrait CONDITION[17:37:15.898] screen: rotation: 90 CONDITION[17:37:21.451] screen: rotation: 0 CONDITION[17:38:42.120] screen: rotation: 270 orientation: square 

O no cambiar la orientación en absoluto:

 CONDITION[11:34:41.134] screen: rotation: 0 CONDITION[11:35:04.533] screen: rotation: 90 CONDITION[11:35:06.312] screen: rotation: 0 CONDITION[11:35:07.938] screen: rotation: 90 CONDITION[11:35:09.336] screen: rotation: 0 

Por otro lado, width () y height () siempre es correcto (es utilizado por el gestor de ventanas, por lo que debería ser mejor). Yo diría que la mejor idea es hacer la comprobación de anchura / altura SIEMPRE. Si usted piensa en un momento, esto es exactamente lo que quiere – saber si el ancho es más pequeño que la altura (retrato), lo contrario (paisaje) o si son iguales (cuadrados).

Entonces viene abajo a este código simple:

 public int getScreenOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = Configuration.ORIENTATION_UNDEFINED; if(getOrient.getWidth()==getOrient.getHeight()){ orientation = Configuration.ORIENTATION_SQUARE; } else{ if(getOrient.getWidth() < getOrient.getHeight()){ orientation = Configuration.ORIENTATION_PORTRAIT; }else { orientation = Configuration.ORIENTATION_LANDSCAPE; } } return orientation; } 

Una forma completa de especificar la orientación actual del teléfono:

  public String getRotation(Context context){ final int rotation = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation(); switch (rotation) { case Surface.ROTATION_0: return "portrait"; case Surface.ROTATION_90: return "landscape"; case Surface.ROTATION_180: return "reverse portrait"; default: return "reverse landscape"; } } 

Chear Binh Nguyen

Otra forma de resolver este problema es no basándose en el valor de retorno correcto de la pantalla, sino dependiendo de la resolución de recursos de Android.

Cree el archivo layouts.xml en las carpetas res/values-land y res/values-port con el siguiente contenido:

Res / values-land / layouts.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <bool name="is_landscape">true</bool> </resources> 

Res / values-port / layouts.xml:

 <?xml version="1.0" encoding="utf-8"?> <resources> <bool name="is_landscape">false</bool> </resources> 

En su código fuente ahora puede acceder a la orientación actual de la siguiente manera:

 context.getResources().getBoolean(R.bool.is_landscape) 

Aquí está la demostración del fragmento de código cómo conseguir la orientación de la pantalla fue recomendada por hackbod y Martijn :

❶ Activar cuando se cambia Orientación:

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); int nCurrentOrientation = _getScreenOrientation(); _doSomeThingWhenChangeOrientation(nCurrentOrientation); } 

❷ Obtener orientación actual como hackbod recomienda:

 private int _getScreenOrientation(){ return getResources().getConfiguration().orientation; } 

❸Hay una solución alternativa para obtener la orientación actual de la pantalla ❷ siga la solución de Martijn :

 private int _getScreenOrientation(){ Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); return display.getOrientation(); } 

Nota : Yo estaba probar ambos implementar ❷ & ❸, pero en RealDevice (NexusOne SDK 2.3) orientación que devuelve la orientación equivocada.

★ Así que recomiendo utilizar la solución ❷ para obtener la orientación de la pantalla que tienen más ventaja: claramente, simple y el trabajo como un encanto.

★ Compruebe cuidadosamente la devolución de la orientación para garantizar la correcta como nuestra espera (Puede ser limitado dependen de la especificación de los dispositivos físicos)

Espero que ayude,

 int ot = getResources().getConfiguration().orientation; switch(ot) { case Configuration.ORIENTATION_LANDSCAPE: Log.d("my orient" ,"ORIENTATION_LANDSCAPE"); break; case Configuration.ORIENTATION_PORTRAIT: Log.d("my orient" ,"ORIENTATION_PORTRAIT"); break; case Configuration.ORIENTATION_SQUARE: Log.d("my orient" ,"ORIENTATION_SQUARE"); break; case Configuration.ORIENTATION_UNDEFINED: Log.d("my orient" ,"ORIENTATION_UNDEFINED"); break; default: Log.d("my orient", "default val"); break; } 

Use getResources().getConfiguration().orientation es el camino correcto.

Sólo tienes que tener cuidado con los diferentes tipos de paisajes, el paisaje que el dispositivo utiliza normalmente y el otro.

Todavía no entiendo cómo manejar eso.

Algún tiempo ha pasado ya que la mayoría de estas respuestas han sido publicadas y algunos usan ahora métodos y constantes obsoletos.

He actualizado el código de Jarek para no usar más estos métodos y constantes:

 protected int getScreenOrientation() { Display getOrient = getWindowManager().getDefaultDisplay(); Point size = new Point(); getOrient.getSize(size); int orientation; if (size.x < size.y) { orientation = Configuration.ORIENTATION_PORTRAIT; } else { orientation = Configuration.ORIENTATION_LANDSCAPE; } return orientation; } 

Tenga en cuenta que el modo Configuration.ORIENTATION_SQUARE ya no es compatible.

He encontrado esto para ser fiable en todos los dispositivos que he probado en contraste con el método que sugiere el uso de getResources().getConfiguration().orientation

Compruebe la orientación de la pantalla en tiempo de ejecución.

 @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Checks the orientation of the screen if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); } } 

Hay una manera más de hacerlo:

 public int getOrientation() { if(getResources().getDisplayMetrics().widthPixels>getResources().getDisplayMetrics().heightPixels) { Toast t = Toast.makeText(this,"LANDSCAPE",Toast.LENGTH_SHORT); t.show(); return 1; } else { Toast t = Toast.makeText(this,"PORTRAIT",Toast.LENGTH_SHORT); t.show(); return 2; } } 

El SDK de Android puede decirle que esta muy bien:

 getResources().getConfiguration().orientation 

Creo que este código puede funcionar después de cambio de orientación tiene efecto

 Display getOrient = getWindowManager().getDefaultDisplay(); int orientation = getOrient.getOrientation(); 

Anule la función Activity.onConfigurationChanged (Configuration newConfig) y utilice newConfig, orientación si desea recibir notificaciones sobre la nueva orientación antes de llamar a setContentView.

Creo que usar getRotationv () no ayuda porque http://developer.android.com/reference/android/view/Display.html#getRotation%28%29 getRotation () Devuelve la rotación de la pantalla de su "natural" orientación.

Así que a menos que conozcas la orientación "natural", la rotación carece de sentido.

Encontré una manera más fácil,

  Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; if(width>height) // its landscape 

Por favor dime si hay un problema con este alguien?

Antiguo post lo sé. Sea cual sea la orientación puede ser o se cambia, etc. Diseñé esta función que se utiliza para configurar el dispositivo en la orientación correcta sin necesidad de saber cómo se organizan las características de retrato y paisaje en el dispositivo.

  private void initActivityScreenOrientPortrait() { // Avoid screen rotations (use the manifests android:screenOrientation setting) // Set this to nosensor or potrait // Set window fullscreen this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); DisplayMetrics metrics = new DisplayMetrics(); this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); // Test if it is VISUAL in portrait mode by simply checking it's size boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels ); if( !bIsVisualPortrait ) { // Swap the orientation to match the VISUAL portrait mode if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT ) { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); } } else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); } } 

¡Funciona de maravilla!

Utilice esta manera,

  int orientation = getResources().getConfiguration().orientation; String Orintaion = ""; switch (orientation) { case Configuration.ORIENTATION_UNDEFINED: Orintaion = "Undefined"; break; case Configuration.ORIENTATION_LANDSCAPE: Orintaion = "Landscrape"; break; case Configuration.ORIENTATION_PORTRAIT: Orintaion = "Portrait"; break; default: Orintaion = "Square";break; } 

En la Cadena tienes la Oriantion

Hay muchas maneras de hacer esto, este pedazo de código funciona para mí

  if (this.getWindow().getWindowManager().getDefaultDisplay() .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { // portrait mode } else if (this.getWindow().getWindowManager().getDefaultDisplay() .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { // landscape } 

Simple y fácil 🙂

  1. Haga 2 diseños xml (es decir, Retrato y Paisaje)
  2. En el archivo java, escribe:

     private int intOrientation; 

    onCreate método onCreate y antes de setContentView escribir:

     intOrientation = getResources().getConfiguration().orientation; if (intOrientation == Configuration.ORIENTATION_PORTRAIT) setContentView(R.layout.activity_main); else setContentView(R.layout.layout_land); I tested it and it works fine. 

En caso de que intentes hacer que tu aplicación se comporte de manera diferente dependiendo de la orientación, consulta otra pregunta como esta relacionada con la orientación de Android que he respondido aquí .

Utiliza Vapor API , un nuevo marco de estilo jQuery recientemente publicado para Android que está diseñado para simplificar el desarrollo de aplicaciones.

En los ejemplos, muestro cómo puede escuchar las llamadas globales relacionadas con la orientación de un dispositivo y hacer que su aplicación ejecute código personalizado dependiendo de la orientación actual del dispositivo del usuario. Por ejemplo:

 $.hook("orientationLandscape").hookIn( new $$hookee<Activity>(this){ @Override public void call(String hookName, VaporBundle args){ // landscape code here } }); $.hook("orientationPortrait").hookIn( new $$hookee<Activity>(this){ @Override public void call(String hookName, VaporBundle args){ // portrait code here } }); 

También puede combinar cosas como oyentes gancho utilizando VaporX también, que es básicamente selectores de estilo jQuery para Android dev.

Espero que ayude a alguien!

  • ¿Cómo debo calcular el azimut, el tono, la orientación cuando mi dispositivo Android no es plano?
  • Android: fija la orientación de la pantalla sólo para una página (diferencia telefónica)
  • Android: orientación manual de la pantalla sin reiniciar la actividad?
  • OnCreate no se llama cuando la pantalla gira - Android
  • Orientación de la pantalla de Android
  • Mantenga la posición de desplazamiento de GridView a través de la rotación de pantalla
  • Android PhoneGap obtener guiñada, tono, rollo, relativo a las coordenadas de tierra
  • El método getOrientation () de Android devuelve resultados incorrectos
  • ¿Cómo cambiar la orientación de la pantalla de GENYMOTION?
  • OnOrientationChanged () se llama cuando OrientationEventListener está deshabilitado
  • Establecer la orientación para sólo 1 fragmento en mi actividad, mientras que el resto está en el retrato
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.