it-swarm.com.de

Android bestimmen die Bildschirmausrichtung zur Laufzeit

Hier ist ein Pseudo-Code zum Erkennen von Bildschirmdrehereignissen und zum Entscheiden oder Ändern der Bildschirmausrichtung.

public boolean onOrientationChanges(orientation) {
  if(orientation == landscape)
    if(settings.get("lock_orientation"))
      return false;   // Retain portrait mode
    else
      return true; // change to landscape mode

  return true; 
}

Wie mache ich ähnliche Dinge in Android?

BEARBEITEN: Ich schaue eigentlich nach Antworten auf Wo soll mit Orientierungsänderungen umgegangen werden . Ich möchte die Ausrichtung nicht korrigieren, indem Sie screenOrientation = "Hochformat" hinzufügen. 

Ich brauche etwas, ähnlich wie onConfigurationChanges (), bei dem ich die Ausrichtung handhaben kann, aber ich brauche nicht, um die Ansicht manuell neu zu zeichnen.

20
Yong Fei

Sie benötigen zuerst eine DisplayInstanz:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

Dann kann Orientierung so aufgerufen werden:

int orientation = display.getOrientation();

Überprüfen Sie die Ausrichtung als Ihren Weg und verwenden Sie diese, um Ausrichtung ändern :

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Ich hoffe, es hilft.

Update

Okay, nehmen wir an, Sie haben eine oAllowvar. Dies ist Booleanund der Standardwert ist Falsename__.

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
    int orientation = display.getOrientation(); 
    switch(orientation) {
        case Configuration.ORIENTATION_PORTRAIT:
            if(!oAllow) {
                    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            }
            break;
        case Configuration.ORIENTATION_LANDSCAPE:
            if(!oAllow) {
                    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            }
            break;
    }
}

Sie können weitere Optionen hinzufügen.

Ich habe dieses Beispiel nicht ausprobiert, aber zumindest ein paar Hinweise zum Lösen. Sag mir, wenn du einen Fehler hast.

UPDATE

getOrientation() ist bereits veraltet siehe hier . Verwenden Sie stattdessen getRotation(). Um zu überprüfen, ob sich das Gerät im Querformat befindet, können Sie Folgendes tun:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE))
        .getDefaultDisplay();

int orientation = display.getRotation();

if (orientation == Surface.ROTATION_90
        || orientation == Surface.ROTATION_270) {
    // TODO: add logic for landscape mode here            
}
44
Ogulcan Orhan

Versuchen Sie zu laufen

getResources().getConfiguration().orientation

Von Ihrem Kontextobjekt aus, um die Bildschirmausrichtung zur Laufzeit herauszufinden, werden die möglichen Werte dokumentiert hier

Um das Orientierungsänderungsereignis abzufangen, finden Sie die Antwort im Android-Entwicklerhandbuch: Handhabung der Konfigurationsänderung selbst

Aus dem Führer: 

Beispielsweise erklärt der folgende Manifestcode eine Aktivität, die Sowohl die Änderung der Bildschirmausrichtung als auch die Änderung der Tastaturverfügbarkeit Vornimmt:

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

Wenn sich nun eine dieser Konfigurationen ändert, wird MyActivity nicht neu gestartet. Stattdessen empfängt MyActivity einen Aufruf an onConfigurationChanged (). Dieser Methode wird ein Konfigurationsobjekt übergeben, das die neue Gerätekonfiguration angibt. Durch Lesen der Felder in der Konfiguration können Sie die neue Konfiguration bestimmen und entsprechende Änderungen vornehmen, indem Sie die in Ihrer Benutzeroberfläche verwendeten Ressourcen aktualisieren. Zum Zeitpunkt, zu dem diese Methode aufgerufen wird, wird das Resources-Objekt Ihrer Aktivität aktualisiert, um auf der neuen Konfiguration basierende Ressourcen zurückzugeben. So können Sie Elemente Ihrer Benutzeroberfläche problemlos zurücksetzen, ohne dass das System Ihre Aktivität neu startet.

...

18
Talihawk
if (this.getWindow().getWindowManager().getDefaultDisplay()
    .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
  // portrait mode
} else if (this.getWindow().getWindowManager().getDefaultDisplay()
           .getOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
  // landscape
}
3
Dwivedi Ji

Sie müssen das Ereignis nicht abfangen und dann überschreiben. Benutz einfach:

// Allow rotation
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
// Lock rotation (to Landscape)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE);

Zu beachten ist hier, ob bei Jellybean und darüber eine 180-Grad-Drehung beim Verriegeln möglich ist. Auch im nicht gesperrten Zustand ist eine Drehung nur möglich, wenn die Haupteinstellungen des Benutzers die Drehung zulassen. Sie können 180-Grad-Rotationen verbieten, die Master-Einstellungen überschreiben und Rotationen zulassen und vieles mehr. Sehen Sie sich die Optionen in ActivityInfo an. 

Wenn Sie voreingestellt haben, dass keine Rotation erfolgen soll, wird Ihre Aktivität nicht zerstört und dann erneut gestartet. Sie müssen lediglich die Ausrichtung zurücksetzen, wodurch die Aktivität erneut gestartet wird. Die Einstellung, was Sie im Voraus möchten, kann also viel effizienter sein.

Vor Jellybean verwenden Sie ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE - keine Drehung um 180 Grad.

1
Steve Waring

Überprüfen Sie Ihre Android-Bildschirmausrichtung zur Laufzeit:

ListView listView = (ListView) findViewById(R.id.listView1);
if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
    //do work for landscape screen mode.
    listView.setPadding(0, 5, 0, 1);
} else if (getResources().getConfiguration().orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
    //Do work for portrait screen mode.
    listView.setPadding(1, 10, 1, 10);
}
0
Rahul Raina

Eine weitere Lösung zur Bestimmung der Bildschirmausrichtung:

public boolean isLandscape() {
    return Resources.getSystem().getDisplayMetrics().widthPixels - Resources.getSystem().getDisplayMetrics().heightPixels > 0;
}
0
IQ.feature