127 votes

Changer l'orientation de l'écran de façon programmatique à l'aide d'un bouton

Je pense que cela est réalisable puisque le comportement de rotation de l'écran peut aller jusqu'au niveau de l'application.

262voto

Hariharan Points 14174

Oui, c'est réalisable !

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE (en anglais)

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ActivityInfo

http://developer.Android.com/reference/Android/content/pm/ActivityInfo.html

Référez-vous à la lien :

Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);

buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   }

});

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
   }

});

http://Android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html

45voto

Philipp Jahoda Points 9277

Oui, vous pouvez définir l'orientation de l'écran par programme quand vous voulez en utilisant :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

pour le mode paysage et le mode portrait respectivement. La méthode setRequestedOrientation() est disponible pour la classe d'activité pour qu'il puisse être utilisé dans votre activité.

Et c'est ainsi que vous pouvez obtenir l'orientation actuelle de l'écran et le régler de manière adéquate en fonction de son état actuel :

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
final int orientation = display.getOrientation(); 
 // OR: orientation = getRequestedOrientation(); // inside an Activity

// set the screen orientation on button click
Button btn = (Button) findViewById(R.id.yourbutton);
btn.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

              switch(orientation) {
                   case Configuration.ORIENTATION_PORTRAIT:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                       break;
                   case Configuration.ORIENTATION_LANDSCAPE:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                       break;                   
               }
          }
   });

Tiré d'ici : http://techblogon.com/Android-screen-orientation-change-rotation-example/

EDIT

Vous pouvez également obtenir l'orientation de l'écran en utilisant la fonction Configuration :

Activity.getResources().getConfiguration().orientation

25voto

Paul Points 311

Dans la mesure du possible, veuillez ne pas utiliser SCREEN_ORIENTATION_LANDSCAPE ou SCREEN_ORIENTATION_PORTRAIT. Utilisez plutôt :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

Ils permettent à l'utilisateur d'orienter l'appareil en mode paysage ou en mode portrait, respectivement. Si vous avez déjà dû jouer à un jeu avec un câble de chargement enfoncé dans l'estomac, vous savez exactement pourquoi il est important pour l'utilisateur de disposer des deux orientations.

Note : Pour les téléphones, du moins plusieurs que j'ai vérifiés, il ne permet que le mode portrait "à l'endroit", cependant, SENSOR_PORTRAIT fonctionne correctement sur les tablettes.

Remarque : cette fonctionnalité a été introduite dans le niveau 9 de l'API, donc si vous devez prendre en charge le niveau 8 ou inférieur (ce qui est peu probable à ce stade), utilisez plutôt :

setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

21voto

Sathya Points 348

Utilisez cette option pour définir l'orientation de l'écran :

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

o

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

et n'oubliez pas d'ajouter ceci à votre manifeste :

android:configChanges = "orientation"

13voto

Liya Points 301

Un code qui fonctionne :

private void changeScreenOrientation() {
    int orientation = yourActivityName.this.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        showMediaDescription();
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        hideMediaDescription();
    }
    if (Settings.System.getInt(getContentResolver(),
            Settings.System.ACCELEROMETER_ROTATION, 0) == 1) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            }
        }, 4000);
    }
}

appelez cette méthode dans le clic de votre bouton

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X