web-dev-qa-db-fra.com

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

Je souhaite simplement définir des indicateurs lorsque mon orientation est en mode paysage. Ainsi, lorsque l'activité est recréée dans onCreate (), je peux basculer entre les éléments à charger en mode portrait et mode paysage. J'ai déjà un XML de mise en page 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);
    }

Une utilisation excessive de onConfigurationChanged empêchera mon XML XML Lay-Land de se charger en orientation Paysage.

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

167
Sheehan Alam
Activity.getResources().getConfiguration().orientation
421
EboMike
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 Context

53
Daniel

Sur certains appareils, 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 utilise 

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}
27
Sakthimuthiah
int rotation =  getWindowManager().getDefaultDisplay().getRotation();

ceci donnera toutes les orientations normales et inverses

et le manipuler 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;
}
20
AndroidBeginner
getActivity().getResources().getConfiguration().orientation

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

12
Rudolf Coutinho

Si quelqu'un souhaite obtenir la description de l'orientation significative (comme celle passée à onConfigurationChanged(..) avec ceux reverseLandscape, sensorLandscape et ainsi de suite), utilisez simplement getRequestedOrientation()

5
a.ch.

Dans votre classe d'activité, 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 un changement de configuration, éditez l'élément approprié dans votre fichier manifeste afin d'inclure l'attribut Android:configChanges avec une valeur représentant la configuration que vous souhaitez gérer. Les valeurs possibles sont répertoriées dans la documentation de l'attribut Android:configChanges (les valeurs les plus 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!!

1
DalveerSinghDaiya

si vous souhaitez remplacer cette méthode onConfigurationChanged et que vous souhaitez tout de même qu'elle effectue les tâches de base, envisagez d'utiliser super.onConfigyrationChanged () comme première instruction de la méthode surchargée.

0
Samarth S

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

Android:configChanges="orientation|keyboardHidden" 

implique que nous déclarons explicitement la disposition à injecter. 

Au cas où nous souhaiterions conserver l'injection automatique grâce aux dossiers de mise en page et de mise en page 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, nous affichons ou non la barre d’action en fonction de l’orientation du téléphone

0
Z3nk