2010-09-08 15 views
144

Je veux juste mettre des drapeaux quand mon orientation est en paysage de sorte que lorsque l'activité est recréée dans onCreate() je peux basculer entre ce qui doit être chargé en portrait et en paysage. J'ai déjà un layout-land xml qui gère ma mise en page. Le fait de surcharger onConfigurationChanged empêchera mon layout-land xml de se charger en mode paysage.Comment puis-je obtenir l'orientation actuelle de l'écran?

Je veux juste obtenir l'orientation actuelle de mon appareil dans onCreate(). Comment puis-je l'obtenir?

Répondre

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

Ceci fournit seulement deux valeurs ORIENTATION_PORTRAIT et ORIENTATION_LANDSCAPE. Existe-t-il un moyen d'obtenir toutes les quatre valeurs de ActivityInfo? (C'est aussi LANDSCAPE_REVERSE et PORTRAIT_REVERSE) – HRJ

+16

@HRJ vous pouvez utiliser getWindowManager(). GetDefaultDisplay().getRotation() – MKJParekh

+18

getWindowManager(). getDefaultDisplay(). getRotation() retourne la rotation en référence à l'orientation "naturelle" de l'affichage, c'est-à-dire qu'elle retourne Surface.ROTATION_0 en mode paysage, alors que pour un téléphone portable la même valeur pour le portrait. –

25

Dans certains périphériques void onConfigurationChanged() peut se bloquer. L'utilisateur utilisera ce code pour obtenir l'orientation actuelle de l'écran.

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

Et utiliser

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

dupliquer la réponse – Apurva

+1

Veuillez noter que getOrient.getWidth() et getOrient.getHeight() sont maintenant obsolètes. – anivaler

+0

Doit être marqué comme la bonne réponse car il est beaucoup plus détaillé – Zapnologica

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

cette commande renvoie la valeur int 1 pour Portrait et 2 pour le paysage

5

En cas où quelqu'un voudrait obtenir la description d'orientation meaningful (comme celui passé à onConfigurationChanged(..) avec ceux reverseLandscape, sensorLandscape et ainsi de suite), utilisez simplement getRequestedOrientation()

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

cette volonté donne toute orientation comme normale et inversée

et la poignée comme

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 
} 

Lorsque la superclasse de this est Activity

0

si vous voulez remplacer cette méthode onConfigurationChanged et s jusqu'à ce que vous vouliez faire les choses de base, alors pensez à utiliser super.onConfigyrationChanged() comme première instruction dans la méthode surchargée.

1

Dans votre classe d'activité utiliser la méthode ci-dessous:

@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"); 
     } 
    } 

ensuite de déclarer que votre activité gère un changement de configuration, modifier l'élément approprié dans votre fichier manifest pour inclure l'attribut android:configChanges avec une valeur qui représente la configuration que vous voulez gérer. Les valeurs possibles sont répertoriées dans la documentation de l'attribut android:configChanges (les valeurs les plus couramment utilisées sont «orientation» pour empêcher les redémarrages lorsque l'orientation de l'écran change et «keyboardHidden» pour empêcher les redémarrages lorsque la disponibilité du clavier change). Vous pouvez déclarer plusieurs valeurs de configuration dans l'attribut en les séparant avec un tube | personnage.

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

C'est tout !!