2010-09-08 15 views
144

Voglio solo impostare alcuni flag quando il mio orientamento è in orizzontale in modo che quando l'attività viene ricreata in onCreate() posso passare da cosa caricare in verticale o orizzontale. Ho già un xml layout-land che gestisce il mio layout.Come posso ottenere l'orientamento dello schermo corrente?

public void onConfigurationChanged(Configuration _newConfig) { 

     if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      this.loadURLData = false; 
     } 

     if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
      this.loadURLData = true; 
     } 

     super.onConfigurationChanged(_newConfig); 
    } 

Over-riding onConfigurationChanged impedirà il caricamento del layout-land xml in orientamento orizzontale.

Voglio solo ottenere l'orientamento corrente del mio dispositivo su onCreate(). Come posso ottenere questo?

risposta

372
Activity.getResources().getConfiguration().orientation 
+8

Fornisce solo due valori ORIENTATION_PORTRAIT e ORIENTATION_LANDSCAPE. C'è un modo per ottenere tutti e quattro i valori da ActivityInfo? (Vale a dire LANDSCAPE_REVERSE e PORTRAIT_REVERSE) – HRJ

+16

@HRJ è possibile utilizzare getWindowManager(). GetDefaultDisplay().getRotation() – MKJParekh

+18

getWindowManager(). getDefaultDisplay(). getRotation() restituisce la rotazione con riferimento all'orientamento "naturale" del display, ovvero per un tablet restituisce Surface.ROTATION_0 in modalità orizzontale, mentre per un telefono cellulare viene restituito lo stesso valore per il ritratto. –

25

In alcuni dispositivi void onConfigurationChanged() potrebbe bloccarsi. L'utente utilizzerà questo codice per ottenere l'orientamento dello schermo corrente.

public int getScreenOrientation() 
{ 
    Display getOrient = getActivity().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; 
} 

e utilizzare

if (orientation==1)  // 1 for Configuration.ORIENTATION_PORTRAIT 
{       // 2 for Configuration.ORIENTATION_LANDSCAPE 
    //your code    // 0 for Configuration.ORIENTATION_SQUARE 
} 
+0

risposta duplicata – Apurva

+1

Si noti che getOrient.getWidth() e getOrient.getHeight() sono ora deprecati. – anivaler

+0

Dovrebbe essere contrassegnato come la risposta corretta come è il modo più dettagliato – Zapnologica

11
getActivity().getResources().getConfiguration().orientation 

questo valore comando restituisce int 1 per Ritratto e 2 per il Paesaggio

5

Nel caso qualcuno vorrebbe ottenere meaningful descrizione orientamento (come quello passato al onConfigurationChanged(..) con quelli reverseLandscape, sensorLandscape e così via), utilizzare semplicemente getRequestedOrientation()

17
int rotation = getWindowManager().getDefaultDisplay().getRotation(); 

questa volontà dà tutti l'orientamento come normale e inversa

e gestirlo come

int angle = 0; 
switch (rotation) { 
    case Surface.ROTATION_90: 
     angle = -90; 
     break; 
    case Surface.ROTATION_180: 
     angle = 180; 
     break; 
    case Surface.ROTATION_270: 
     angle = 90; 
     break; 
    default: 
     angle = 0; 
     break; 
} 
36
int orientation = this.getResources().getConfiguration().orientation; 
if (orientation == Configuration.ORIENTATION_PORTRAIT) { 
    //code for portrait mode 
} else { 
    //code for landscape mode 
} 

Quando la superclasse di this è Activity

0

se si desidera sovrascrive il metodo onConfigurationChanged e s fino a quando vorrà fare le cose di base, allora considera l'uso di super.onConfigyrationChanged() come prima affermazione nel metodo sovrascritto.

1

Nella classe di attività utilizzare il seguente metodo:

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 

     // Checks the orientation of the screen 
     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 

      setlogo();// Your Method 
      Log.d("Daiya", "ORIENTATION_LANDSCAPE"); 

     } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 

      setlogoForLandScape();// Your Method 
      Log.d("Daiya", "ORIENTATION_PORTRAIT"); 
     } 
    } 

Poi a dichiarare che la vostra attività gestisce la modifica della configurazione, modificare l'elemento appropriato nel file manifesto per includere l'attributo android:configChanges con un valore che rappresenta il configurazione che si desidera gestire. I valori possibili sono elencati nella documentazione per l'attributo android:configChanges (i valori più comunemente utilizzati sono "orientamento" per impedire riavvii quando l'orientamento dello schermo cambia e "keyboardHidden" per impedire il riavvio quando la disponibilità della tastiera cambia). È possibile dichiarare più valori di configurazione nell'attributo separandoli con una pipe | carattere.

<activity android:name=".MyActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name"> 

Questo è tutto !!

Problemi correlati