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


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

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

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"

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.