Comment puis-je obtenir l'orientation actuelle de l'écran?


190

Je veux juste définir des indicateurs lorsque mon orientation est en paysage afin que lorsque l'activité est recréée dans onCreate (), je puisse basculer entre ce qu'il faut charger en portrait et en paysage. J'ai déjà un xml layout-land qui gère ma mise en page.

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 empêchera mon fichier XML layout-land de se charger en orientation paysage.

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

Réponses:


475
Activity.getResources().getConfiguration().orientation

8
Cela ne fournit que deux valeurs ORIENTATION_PORTRAIT et ORIENTATION_LANDSCAPE. Existe-t-il un moyen d'obtenir les quatre valeurs de ActivityInfo? (C'est aussi LANDSCAPE_REVERSE et PORTRAIT_REVERSE)
HRJ

18
@HRJ vous pouvez utiliser getWindowManager (). GetDefaultDisplay (). GetRotation ()
MKJParekh

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

65
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

Quand la superclasse thisestContext


28

Dans certains appareils, cela void onConfigurationChanged()peut planter. 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 utilise

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

1
Veuillez noter que getOrient.getWidth () et getOrient.getHeight () sont désormais obsolètes.
valerybodak

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

1
Doit être marqué comme réponse correcte et fonctionne mieux dans toutes les conditions. Mais s'il vous plaît noter qu'un équivalent dit que getActivity (). GetWindowManager (). GetDefaultDisplay (). GetWidth () et getHeight () est désormais obsolète. Veuillez utiliser getSize (Taille du point). Il peut être utilisé comme un nouvel objet point passant et qui obtiendra ses membres x et y.
Mahendra Chhimwal

comme Point outSize = nouveau point (); getOrient.getSize (outSize); if (outSize.x == outSize.y) return SQUARE;
Mahendra Chhimwal

Je pensais que je ferais remarquer que Configuration.ORIENTATION_SQUARE est obsolète et bien qu'il ait été défini comme 0 en 2013, il est défini comme 3, tandis que Configuration.ORIENTIATION_UNDEFINED est défini comme 0. Cheers.
Dave

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

cela donnera toute l'orientation comme normale et inverse

et le gérer 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;
}

final int angle = (rotation == Surface.ROTATION_90) ? 90 : (rotation == Surface.ROTATION_180) ? 180 : (rotation == Surface.ROTATION_270) ? 270 : 0;
Andrey Syrokomskiy

12
getActivity().getResources().getConfiguration().orientation

cette commande renvoie la valeur int 1 pour Portrait et 2 pour Paysage



1

Dans votre classe d'activités, utilisez 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, pour déclarer que votre activité gère une modification de configuration, modifiez l'élément approprié dans votre fichier manifeste pour inclure l' android:configChangesattribut avec une valeur qui représente la configuration que vous souhaitez gérer. Les valeurs possibles sont répertoriées dans la documentation de l' android:configChangesattribut (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 par un tube | personnage.

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

C'est tout!!


0

si vous voulez remplacer cette méthode onConfigurationChanged et que vous voulez toujours qu'elle fasse les choses de base, envisagez d'utiliser super.onConfigyrationChanged () comme première instruction de la méthode overriden.


0

Je veux juste proposer une autre alternative qui concernera certains d'entre vous:

android:configChanges="orientation|keyboardHidden" 

implique que nous déclarons explicitement la mise en page à injecter.

Au cas où nous souhaiterions conserver l'injection automatique grâce aux dossiers layout-land et layout. Tout ce que vous avez à faire est de l'ajouter à onCreate:

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

Ici, on affiche ou non la barre d'action en fonction de l'orientation du téléphone

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.