web-dev-qa-db-fra.com

Modifier l'orientation de l'écran par programmation à l'aide d'un bouton

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

86
Sam

Oui, c'est réalisable!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

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érer le 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

194
Hariharan

Oui, vous pouvez définir l'orientation de l'écran par programme à tout moment à l'aide de:

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

pour les modes paysage et portrait respectivement. La méthode setRequestedOrientation () est disponible pour la classe d'activité et peut donc être utilisée dans votre activité.

Et voici comment vous pouvez obtenir l'orientation actuelle de l'écran et la définir correctement 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/

MODIFIER

En outre, vous pouvez obtenir l'orientation de l'écran à l'aide de la touche Configuration:

Activity.getResources().getConfiguration().orientation
35
Philipp Jahoda

Dans la mesure du possible, n'utilisez pas SCREEN_ORIENTATION_LANDSCAPE ou SCREEN_ORIENTATION_PORTRAIT. Utilisez plutôt:

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

Celles-ci permettent à l'utilisateur d'orienter le périphérique soit vers l'orientation paysage, soit vers l'orientation portrait. Si vous avez déjà eu à jouer à un jeu avec un câble de charge enfoncé dans votre estomac, vous savez alors exactement pourquoi il est important que les deux orientations soient disponibles.

Remarque: pour les téléphones, au moins plusieurs de ceux que j'ai cochés, le mode portrait est uniquement autorisé, mais SENSOR_PORTRAIT fonctionne correctement sur les tablettes.

Remarque: cette fonctionnalité a été introduite dans l'API niveau 9. Par conséquent, si vous devez prendre en charge une version inférieure ou égale à 8 (probablement pas à 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);
19
Paul

Utilisez ceci pour définir l'orientation de l'écran:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ou

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

Android:configChanges = "orientation"
18
Sathya

Un code de travail:

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 en cliquant sur votre bouton

6
Liya