2010-09-09 11 views
31

¿Hay alguna forma de averiguar si un dispositivo es vertical u horizontal de forma predeterminada? Me refiero a la forma en que normalmente usas el dispositivo.Averiguar si el dispositivo Android es vertical u horizontal para un uso normal

La mayoría de los teléfonos tienen una pantalla de retratos para uso normal, pero ¿hay algún indicador para averiguarlo?

+0

¿Quiere decir en el tiempo de ejecución de la aplicación para verificar si el dispositivo es horizontal o vertical? – Herry

+0

posible duplicado de [Cómo comprobar la orientación natural del dispositivo (predeterminado) en Android (es decir, obtener un paisaje para, por ejemplo, Motorola Charm o Flipout)] (http://stackoverflow.com/questions/4553650/how-to-check-device- natural-default-orientation-on-android-ie-get-landscape) – weston

Respuesta

2
package com.android.portraitandlandscape; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Display; 
import android.widget.Toast; 

public class PortraitLandScape extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth(); 
    int height = display.getHeight(); 

    Log.v("log_tag", "display width is "+ width); 
    Log.v("log_tag", "display height is "+ height); 

    if(width<height){ 
     Toast.makeText(getApplicationContext(),"Device is in portrait mode",Toast.LENGTH_LONG).show(); 
    } 
    else{ 
     Toast.makeText(getApplicationContext(),"Device is in landscape mode",Toast.LENGTH_LONG).show(); 
    } 

} 
} 

Puede probar este código para comprobar si el dispositivo está en horizontal o en vertical.

116

Usted puede hacer esto por:

Para Lanscape

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){ 
    //Do some stuff 
} 

para el retrato

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){ 
    //Do some stuff 
} 

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

+2

Esto no funciona para mí cuando una de mis actividades está bloqueada a una orientación particular en el Manifiesto. Por ejemplo, si está bloqueado en "Vertical", va a devolver Configuration.ORIENTATION_PORTRAIT aunque mi dispositivo sea una tableta horizontal. – jrequejo

+1

Trabajando como un campeón en 2017. –

+0

@jrequejo ¿Quizás use los datos del giroscopio? – zundi

0

no estoy seguro de si esto ayudará, pero este es un ejemplo rápido que escribí que le mostrará cómo tener un oyente ... lo que le permitirá averiguar qué orientación se encuentra en

...textviewOrientation = (TextView)findViewById(R.id.textView1); 

    myOrientationEventListener = new OrientationEventListener(this, 
       SensorManager.SENSOR_DELAY_NORMAL){ 

     @Override 
     public void onOrientationChanged(int arg0) { 

     textviewOrientation.setText("Orientation: " + String.valueOf(arg0)); 
     myOrientationEventListener.enable(); 


      if ((arg0 < 100) || (arg0 > 280)){ 

       setRequestedOrientation(
        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

      } else { 

       setRequestedOrientation(
        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

      } 


     } 

    };... 


[email protected] 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    myOrientationEventListener.disable(); 
}... 
2

En su actvity, hacer esto.:

if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) 

por ejemplo ...

1

Gracias a @Codeversed, cuya excelente respuesta está muy cerca de trabajo (pero no como se muestra), que tienen una MainActivity que funciona bien. Todo lo que necesita hacer es mover .enable a donde se puede ejecutar FUERA del bloque on, como inmediatamente después de la declaración de myOrientationEventListener.

import android.app.Activity; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.OrientationEventListener; 

public class MainActivity extends Activity 
{ 
    public static boolean PORTRAIT_MODE = true; 
    OrientationEventListener myOrientationEventListener ; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 

     myOrientationEventListener = new OrientationEventListener(this, 
       SensorManager.SENSOR_DELAY_NORMAL) 
     { 
      @Override 
      public void onOrientationChanged(int orientation) 
      { 
       PORTRAIT_MODE = ((orientation < 100) || (orientation > 280)); 
       Log.w("Orient", orientation + " PORTRAIT_MODE = " + PORTRAIT_MODE); 
      } 
     }; 
     Log.w("Listener", " can detect orientation: " + myOrientationEventListener.canDetectOrientation() + " "); 
     myOrientationEventListener.enable(); 
    } 
} 
1

Tuve un problema similar. Lo resolvió comparando valores de rotación y orientación. No es necesario utilizar sensores ni auditores, solo llame al isDefaultLandscape cuando lo desee.

private boolean isDefaultLandscape(final Context context) 
{ 
    Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int rotation = display.getRotation(); 
    int orientation = context.getResources().getConfiguration().orientation; 

    switch (rotation) 
    { 
     case Surface.ROTATION_180: 
     case Surface.ROTATION_0: 
     { 
      return orientation == Configuration.ORIENTATION_LANDSCAPE; 
     } 
     default: 
     { 
      return orientation == Configuration.ORIENTATION_PORTRAIT; 
     } 
    } 
} 
Cuestiones relacionadas