Wie kann ich die aktuelle Bildschirmausrichtung abrufen?


190

Ich möchte nur einige Flags setzen, wenn sich meine Ausrichtung im Querformat befindet, damit ich bei der Neuerstellung der Aktivität in onCreate () zwischen dem Laden im Hochformat und dem Querformat wechseln kann. Ich habe bereits eine Layout-Land-XML, die mein Layout verwaltet.

public void onConfigurationChanged(Configuration _newConfig) {

        if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            this.loadURLData = false;
        }

        if (_newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            this.loadURLData = true;
        }

        super.onConfigurationChanged(_newConfig);
    }

Wenn Sie onConfigurationChanged überschreiben, wird verhindert, dass meine Layout-Land-XML im Querformat geladen wird.

Ich möchte nur die aktuelle Ausrichtung meines Geräts in onCreate () abrufen. Wie kann ich das bekommen?

Antworten:


474
Activity.getResources().getConfiguration().orientation

8
Dies liefert nur zwei Werte ORIENTATION_PORTRAIT und ORIENTATION_LANDSCAPE. Gibt es eine Möglichkeit, alle vier Werte von ActivityInfo abzurufen? (Das ist auch LANDSCAPE_REVERSE und
PORTRAIT_REVERSE

18
@HRJ können Sie getWindowManager (). GetDefaultDisplay (). GetRotation ()
MKJParekh

24
getWindowManager (). getDefaultDisplay (). getRotation () gibt die Drehung in Bezug auf die "natürliche" Ausrichtung des Displays zurück, dh für ein Tablet wird Surface.ROTATION_0 im Querformat zurückgegeben, während für ein Mobiltelefon der gleiche Wert für zurückgegeben wird Porträt.
Zoltán

64
int orientation = this.getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
    // code for portrait mode
} else {
    // code for landscape mode
}

Wenn die Oberklasse von thisistContext


28

Bei einigen Geräten void onConfigurationChanged()kann es zum Absturz kommen. Der Benutzer verwendet diesen Code, um die aktuelle Bildschirmausrichtung abzurufen.

public int getScreenOrientation()
{
    Display getOrient = getActivity().getWindowManager().getDefaultDisplay();
    int orientation = Configuration.ORIENTATION_UNDEFINED;
    if(getOrient.getWidth()==getOrient.getHeight()){
        orientation = Configuration.ORIENTATION_SQUARE;
    } else{ 
        if(getOrient.getWidth() < getOrient.getHeight()){
            orientation = Configuration.ORIENTATION_PORTRAIT;
        }else { 
             orientation = Configuration.ORIENTATION_LANDSCAPE;
        }
    }
    return orientation;
}

Und verwenden

if (orientation==1)        // 1 for Configuration.ORIENTATION_PORTRAIT
{                          // 2 for Configuration.ORIENTATION_LANDSCAPE
   //your code             // 0 for Configuration.ORIENTATION_SQUARE
}

1
Bitte beachten Sie, dass getOrient.getWidth () und getOrient.getHeight () jetzt veraltet sind.
Valerybodak

Sollte als die richtige Antwort markiert werden, da dies viel detaillierter ist
Zapnologica

1
Sollte als richtige Antwort markiert sein und funktioniert unter allen Bedingungen am besten. Beachten Sie jedoch, dass getActivity (). GetWindowManager (). GetDefaultDisplay (). GetWidth () und getHeight () jetzt veraltet sind. Bitte verwenden Sie getSize (Point Outsize). Es kann als Übergabe eines neuen Punktobjekts verwendet werden, das seine x- und y-Elemente erhält.
Mahendra Chhimwal

wie Point outSize = neuer Punkt (); getOrient.getSize (outSize); if (outSize.x == outSize.y) return SQUARE;
Mahendra Chhimwal

Ich dachte, ich möchte darauf hinweisen, dass Configuration.ORIENTATION_SQUARE veraltet ist und während es 2013 möglicherweise als 0 definiert wurde, ist es als 3 definiert, während Configuration.ORIENTIATION_UNDEFINED als 0 definiert ist. Prost.
Dave

26
int rotation =  getWindowManager().getDefaultDisplay().getRotation();

Dies gibt alle Orientierung wie normal und umgekehrt

und damit umgehen wie

int angle = 0;
switch (rotation) {
    case Surface.ROTATION_90:
        angle = -90;
        break;
    case Surface.ROTATION_180:
        angle = 180;
        break;
    case Surface.ROTATION_270:
        angle = 90;
        break;
    default:
        angle = 0;
        break;
}

final int angle = (rotation == Surface.ROTATION_90) ? 90 : (rotation == Surface.ROTATION_180) ? 180 : (rotation == Surface.ROTATION_270) ? 270 : 0;
Andrey Syrokomskiy

12
getActivity().getResources().getConfiguration().orientation

Dieser Befehl gibt den int-Wert 1 für Hochformat und 2 für Querformat zurück



1

Verwenden Sie in Ihrer Aktivitätsklasse die folgende Methode:

 @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

            setlogo();// Your Method
            Log.d("Daiya", "ORIENTATION_LANDSCAPE");

        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

            setlogoForLandScape();// Your Method
            Log.d("Daiya", "ORIENTATION_PORTRAIT");
        }
    }

Um zu deklarieren, dass Ihre Aktivität eine Konfigurationsänderung behandelt, bearbeiten Sie das entsprechende Element in Ihrer Manifestdatei, um das android:configChangesAttribut mit einem Wert einzuschließen, der die Konfiguration darstellt, die Sie behandeln möchten. Mögliche Werte sind in der Dokumentation für das android:configChangesAttribut aufgeführt (die am häufigsten verwendeten Werte sind "Ausrichtung", um Neustarts zu verhindern, wenn sich die Bildschirmausrichtung ändert, und "Tastatur ausgeblendet", um Neustarts zu verhindern, wenn sich die Verfügbarkeit der Tastatur ändert). Sie können mehrere Konfigurationswerte im Attribut deklarieren, indem Sie sie durch eine Pipe | trennen Charakter.

<activity android:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden"
          android:label="@string/app_name">

Das ist alles!!


0

Wenn Sie diese onConfigurationChanged-Methode überschreiben möchten und dennoch die grundlegenden Aufgaben ausführen möchten, sollten Sie super.onConfigyrationChanged () als erste Anweisung in der überschriebenen Methode verwenden.


0

Ich möchte nur eine andere Alternative vorschlagen, die einige von Ihnen betrifft:

android:configChanges="orientation|keyboardHidden" 

impliziert, dass wir das zu injizierende Layout explizit deklarieren.

Für den Fall, dass wir die automatische Injektion dank der Layout-Land- und Layout-Ordner beibehalten möchten. Alles was Sie tun müssen, ist es zu onCreate hinzuzufügen:

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();

    } else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
        getSupportActionBar().show();
    }

Hier wird die Aktionsleiste je nach Ausrichtung des Telefons angezeigt oder nicht

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.