Ä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


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

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

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"

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.