2010-09-09 11 views
31

Esiste comunque la possibilità di scoprire se un dispositivo è ritratto o orizzontale di default? In questo intendo come usi normalmente il dispositivo.Scopri se il dispositivo Android è verticale o orizzontale per un utilizzo normale?

La maggior parte dei telefoni ha uno schermo verticale per l'uso normale, ma c'è qualche bandiera per scoprirlo?

+0

Intendi trovare il tempo di esecuzione dell'applicazione per verificare che il dispositivo meteo sia orizzontale o verticale? – Herry

+0

possibile duplicato di [Come verificare l'orientamento naturale del dispositivo (predefinito) su Android (ad esempio, ottenere panoramiche per es., Motorola Charm o Flipout)] (http://stackoverflow.com/questions/4553650/how-to-check-device- natural-default-orientation-on-android-ie-get-landscape) – weston

risposta

2

È possibile provare questo codice per verificare se il dispositivo è in orizzontale o in verticale.

116

È possibile effettuare questa operazione:

Per Paesaggio

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

Per Ritratto

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

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

+2

Questo non funziona per me quando una delle mie attività è bloccata su un particolare orientamento nel Manifest. Ad esempio, se è bloccato su "Ritratto", restituirà Configuration.ORIENTATION_PORTRAIT anche se il mio dispositivo è una tavoletta panoramica. – jrequejo

+1

Lavorare come un campione nel 2017. –

+0

@jrequejo Forse usare i dati del giroscopio? – zundi

0

io non sono sicuro se questo aiuterà, ma questo è un esempio veloce ho scritto che vi mostrerà come avere un ascoltatore ... che vi permetterà di capire quale orientamento si è in

...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

Nella tua actvity, fare questo.:

if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) 

per esempio ...

1

Grazie a @Codeversed, il cui eccellente risposta è molto vicino a lavorare (ma non come indicato), ho un MainActivity che funziona bene. È sufficiente spostare .enable su dove può essere eseguito ESTERNO del blocco on, ad esempio subito dopo la dichiarazione di 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

Ho avuto un problema simile. Risolto confrontando i valori di rotazione e orientamento. Non è necessario utilizzare sensori o ascoltatori, basta chiamare il metodo isDefaultLandscape quando lo si desidera.

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; 
     } 
    } 
} 
Problemi correlati