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

Réponses:

216

Oui, c'est réalisable!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ActivitéInfo

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

Référez-vous au 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

Hariharan
la source
Merci. Mais cette fonction doit-elle être exécutée sur un périphérique enraciné? Cela ne semble pas fonctionner sur mon téléphone portable mais sur ma tablette enracinée.
Sam
Non, ce n'est pas comme ça .. En fait, j'ai testé le code dans ce lien avant de poster .. Il fonctionnait dans mon appareil ..
Hariharan
ok, oui, tu as raison. Je viens de tester un autre appareil et cela fonctionne bien. eh bien, mon Samsung Galaxy Nexus ne fonctionne pas. Je ne sais pas pourquoi.
Sam
4
Merci d'avoir répondu. Mais cela verrouille l'application dans ce mode. Lorsque l'utilisateur fait tourner l'appareil, l'écran ne tourne pas.
Eco4ndly
2
Si je règle l'orientation sur paysage par programmation comme cette réponse, l'utilisateur n'est plus en mesure de changer l'orientation en faisant pivoter l'appareil. Un moyen de gérer ce problème? Je veux faire ce qui a été enseigné dans cette réponse, mais lorsque l'utilisateur fait pivoter l'appareil, il continue de changer d'orientation.
Soon Santos
36

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

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

pour le mode paysage et portrait respectivement. La méthode setRequestedOrientation () est disponible pour la classe Activity , elle peut donc être utilisée dans votre Activity.

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

ÉDITER

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

Activity.getResources().getConfiguration().orientation
Philipp Jahoda
la source
3
Je suggère d'utiliser getRequestedOrientation()pour obtenir l'orientation actuelle de l'écran: stackoverflow.com/a/21909327/1037294
a.ch.
getRequestedOrientation()vous donne UNSPECIFIEDlorsque vous démarrez l'application. Donc, avec l'auditeur ci-dessus, cela ne changera pas d'écran et si vous ajoutez UNSPECIFIEDà switchcela, il devrait d'abord mettre l'écran dans l'une des positions Portrait / Paysage .
mortalis
22

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

Ceux-ci permettent à l'utilisateur d'orienter l'appareil soit en orientation paysage, soit en orientation portrait, respectivement. Si vous avez déjà eu à jouer à un jeu avec un câble de charge enfoncé dans votre estomac, vous savez exactement pourquoi il est important pour l'utilisateur d'avoir les deux orientations disponibles.

Remarque: pour les téléphones, au moins plusieurs que j'ai vérifiés, il n'autorise que le mode portrait «côté droit en haut», cependant, SENSOR_PORTRAIT fonctionne correctement sur les tablettes.

Remarque: cette fonctionnalité a été introduite dans l'API niveau 9, donc si vous devez prendre en charge 8 ou une version inférieure (peu probable à ce stade), utilisez à la place:

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);
Paul
la source
19

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"
Sathya
la source
2
Vous avez besoin des deux "orientation|screenSize", regardez ici: developer.android.com/guide/topics/resources/…
Benny
7

Un code fonctionnel:

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

Liya
la source