Ändern Sie die Bildschirmausrichtung programmgesteuert mit einer Schaltfläche

Antworten:

216

Ja, es ist umsetzbar!

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

Siehe den Link:

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-programmatic.html

Hariharan
quelle
Vielen Dank. Aber muss diese Funktion auf einem gerooteten Gerät ausgeführt werden? Es scheint nicht auf meinem Handy zu funktionieren, sondern auf meinem verwurzelten Tablet.
Sam
Nein, das ist nicht so. Eigentlich habe ich den Code in diesem Link vor dem Posten getestet. Es hat auf meinem Gerät funktioniert.
Hariharan
Okay, ja, du hast recht. Ich habe gerade ein anderes Gerät getestet und es funktioniert gut. Nun, mein Samsung Galaxy Nexus funktioniert nicht. Ich weiß nicht warum.
Sam
4
Danke für die Antwort. Dies sperrt jedoch die Anwendung in diesem Modus. Wenn der Benutzer das Gerät dreht, dreht sich der Bildschirm nicht.
Eco4ndly
2
Wenn ich die Ausrichtung als Antwort programmgesteuert auf Querformat setze, kann der Benutzer die Ausrichtung nicht mehr durch Drehen des Geräts ändern. Wie kann man dieses Problem lösen? Ich möchte das tun, was in dieser Antwort gelehrt wurde, aber wenn der Benutzer das Gerät dreht, ändert sich die Ausrichtung ständig.
Bald Santos
36

Ja, Sie können die Bildschirmausrichtung jederzeit programmgesteuert einstellen, indem Sie Folgendes verwenden:

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

für Quer- und Hochformat. Die setRequestedOrientation () -Methode ist für die Activity-Klasse verfügbar , sodass sie in Ihrer Activity verwendet werden kann.

Und so können Sie die aktuelle Bildschirmausrichtung abrufen und sie je nach aktuellem Status angemessen einstellen:

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

Entnommen von hier: http://techblogon.com/android-screen-orientation-change-rotation-example/

BEARBEITEN

Sie können die Bildschirmausrichtung auch über Folgendes abrufen Configuration:

Activity.getResources().getConfiguration().orientation
Philipp Jahoda
quelle
3
Ich würde vorschlagen getRequestedOrientation(), die aktuelle Bildschirmausrichtung zu verwenden: stackoverflow.com/a/21909327/1037294
a.ch.
getRequestedOrientation()gibt Ihnen, UNSPECIFIEDwenn Sie die App starten. Mit dem obigen Listener ändert sich der Bildschirm nicht. Wenn Sie ihn hinzufügen UNSPECIFIED, switchsollte der Bildschirm zuerst in die Position " Hochformat" / "Querformat" gebracht werden.
Mortalis
22

Verwenden Sie nach Möglichkeit nicht SCREEN_ORIENTATION_LANDSCAPE oder SCREEN_ORIENTATION_PORTRAIT. Verwenden Sie stattdessen:

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

Diese ermöglichen es dem Benutzer, das Gerät entweder im Querformat oder im Hochformat auszurichten. Wenn Sie jemals ein Spiel mit einem Ladekabel spielen mussten, das in Ihren Magen geführt wird, wissen Sie genau, warum es für den Benutzer wichtig ist, beide Ausrichtungen zur Verfügung zu haben.

Hinweis: Bei Telefonen, von denen mindestens einige überprüft wurden, ist nur der Porträtmodus "mit der rechten Seite nach oben" zulässig. SENSOR_PORTRAIT funktioniert jedoch auf Tablets ordnungsgemäß.

Hinweis: Diese Funktion wurde in API Level 9 eingeführt. Wenn Sie also 8 oder weniger unterstützen müssen (derzeit wahrscheinlich nicht), verwenden Sie stattdessen:

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
quelle
19

Verwenden Sie diese Option, um die Ausrichtung des Bildschirms festzulegen:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

oder

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

und vergessen Sie nicht, dies Ihrem Manifest hinzuzufügen:

android:configChanges = "orientation"
Sathya
quelle
2
Sie brauchen beides "orientation|screenSize". Schauen Sie hier: developer.android.com/guide/topics/resources/…
Benny
7

Ein Arbeitscode:

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

Rufen Sie diese Methode in Ihrem Button-Klick auf

Liya
quelle