web-dev-qa-db-fra.com

Savoir si un appareil Android est en mode portrait ou paysage pour une utilisation normale?

Est-il possible de savoir si un appareil est en mode portrait ou paysage par défaut? En cela, je veux dire comment vous utilisez normalement l'appareil. 

La plupart des téléphones ont un écran portrait pour une utilisation normale, mais existe-t-il un indicateur permettant de le savoir?

38
joynes

Vous pouvez le faire en:

Pour le paysage

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

Pour Portrait

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

Vérifiez: http://developer.Android.com/reference/Android/content/res/Configuration.html#orientation

139
Hazem Farahat

Grâce à @Codeversed, dont l'excellente réponse est sur le point de fonctionner (mais ne fonctionne pas comme indiqué), j'ai un MainActivity qui fonctionne bien. Tout ce qui doit être fait est de déplacer .enable vers où il peut être exécuté EN DEHORS du bloc on, par exemple immédiatement après la déclaration de 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();
    }
}
2
DSlomer64

Dans votre activité, procédez comme suit:

if(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

par exemple...

2
Cícero Moura
package com.Android.portraitandlandscape;

import Android.app.Activity;
import Android.os.Bundle;
import Android.util.Log;
import Android.view.Display;
import Android.widget.Toast;

public class PortraitLandScape extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth();
    int height = display.getHeight();

    Log.v("log_tag", "display width is "+ width);
    Log.v("log_tag", "display height is "+ height);

    if(width<height){
        Toast.makeText(getApplicationContext(),"Device is in portrait mode",Toast.LENGTH_LONG ).show();
    }
    else{
        Toast.makeText(getApplicationContext(),"Device is in landscape  mode",Toast.LENGTH_LONG ).show();
    }

 }
}

Vous pouvez essayer ce code pour vérifier si le périphérique est en mode paysage ou en mode portrait.

2
Herry

J'ai eu un problème similaire. Résolu en comparant les valeurs de rotation et d'orientation. Il n'est pas nécessaire d'utiliser des capteurs ou des écouteurs, appelez simplement la méthode isDefaultLandscape à tout moment.

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;
        }
    }
}
1
Sa Qada

Je ne sais pas si cela vous aidera, mais voici un exemple rapide que j'ai écrit et qui vous montrera comment avoir un auditeur ... qui vous permettra de déterminer l'orientation de votre orientation.

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

             }


        }

    };...


...@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    myOrientationEventListener.disable();
}...
1
Codeversed

C'est simple , Juste un bloc If-Else:

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
    // landscape
} else {
    // portrait
}
0
Hasib Akter
// Current orientation
public boolean landscape = false;

public boolean isLandscape(){

    DisplayMetrics displaymetrics = new DisplayMetrics();
    context.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int width = displaymetrics.widthPixels;
    int height = displaymetrics.heightPixels;

    if(width<height){
        landscape = false;
    }
    else{
        landscape = true;
    }

    return landscape;

}
0
codebyjames