Wie kann ich überprüfen, ob sich das Android-Telefon im Querformat oder im Hochformat befindet?
java
android
orientation
Mohit Deshpande
quelle
quelle
Antworten:
Die aktuelle Konfiguration, mit der bestimmt wird, welche Ressourcen abgerufen werden sollen, ist im
Configuration
Objekt " Ressourcen" verfügbar :Sie können die Orientierung überprüfen, indem Sie sich den Wert ansehen:
Weitere Informationen finden Sie im Android Developer .
quelle
android:screenOrientation="portrait"
), gibt diese Methode denselben Wert zurück, unabhängig davon, wie der Benutzer das Gerät dreht. In diesem Fall würden Sie den Beschleunigungsmesser oder den Schwerkraftsensor verwenden, um die Ausrichtung richtig herauszufinden.Wenn Sie auf einigen Geräten die Ausrichtung getResources (). GetConfiguration (). Orientieren, wird dies falsch verstanden. Wir haben diesen Ansatz ursprünglich in http://apphance.com verwendet . Dank der Remote-Protokollierung von Apphance konnten wir es auf verschiedenen Geräten sehen und wir haben gesehen, dass Fragmentierung hier seine Rolle spielt. Ich habe seltsame Fälle gesehen: zum Beispiel abwechselndes Porträt und Quadrat (?!) Auf dem HTC Desire HD:
oder die Orientierung überhaupt nicht ändern:
Auf der anderen Seite sind width () und height () immer korrekt (sie werden vom Fenstermanager verwendet, sollten es also besser sein). Ich würde sagen, die beste Idee ist, die Breiten- / Höhenprüfung IMMER durchzuführen. Wenn Sie über einen Moment nachdenken, ist dies genau das, was Sie wollen - um zu wissen, ob die Breite kleiner als die Höhe (Hochformat) ist, das Gegenteil (Querformat) oder ob sie gleich sind (Quadrat).
Dann kommt es auf diesen einfachen Code an:
quelle
getWidth
undgetHeight
sind nicht veraltet.getSize(Point outSize)
stattdessen. Ich benutze API 23.Eine andere Möglichkeit, dieses Problem zu lösen, besteht darin, sich nicht auf den korrekten Rückgabewert der Anzeige zu verlassen, sondern auf die Auflösung der Android-Ressourcen.
Erstellen Sie die Datei
layouts.xml
in den Ordnernres/values-land
undres/values-port
mit folgendem Inhalt:res / values-land / layouts.xml:
res / values-port / layouts.xml:
In Ihrem Quellcode können Sie jetzt wie folgt auf die aktuelle Ausrichtung zugreifen:
quelle
Eine vollständige Möglichkeit, die aktuelle Ausrichtung des Telefons festzulegen:
Chear Binh Nguyen
quelle
getOrientation()
funktioniert, aber das ist nicht korrekt, wenn ich es benutzegetRotation()
. Rotationsquelle"Returns the rotation of the screen from its "natural" orientation."
abrufen . Auf einem Telefon, auf dem ROTATION_0 als Hochformat angezeigt wird, ist dies wahrscheinlich korrekt, auf einem Tablet ist die "natürliche" Ausrichtung jedoch wahrscheinlich Querformat, und ROTATION_0 sollte Querformat anstelle von Hochformat zurückgeben.Hier ist eine Code-Snippet-Demo, wie man die Bildschirmorientierung erhält. Dies wurde von Hackbod und Martijn empfohlen :
❶ Auslösen beim Ändern der Ausrichtung:
❷ Holen Sie sich die aktuelle Orientierung, wie Hackbod empfiehlt:
❸Es gibt alternative Lösungen, um die aktuelle Bildschirmausrichtung zu erhalten. ❷ Folgen Sie der Martijn- Lösung:
★ Hinweis : Ich habe versucht, beide implement & ❸ zu implementieren, aber unter RealDevice (NexusOne SDK 2.3) gibt die Ausrichtung die falsche Ausrichtung zurück.
★ Ich empfehle daher die Verwendung einer Lösung used, um eine Bildschirmorientierung zu erhalten, die mehr Vorteile bietet: klar, einfach und wie ein Zauber.
★ Überprüfen Sie sorgfältig die Rückgabe der Ausrichtung, um sicherzustellen, dass sie wie erwartet korrekt ist (möglicherweise abhängig von der Spezifikation der physischen Geräte).
Hoffe es hilft,
quelle
quelle
Verwenden Sie
getResources().getConfiguration().orientation
es ist der richtige Weg.Sie müssen nur auf verschiedene Arten von Landschaften achten, auf die Landschaft, die das Gerät normalerweise verwendet, und auf die andere.
Ich verstehe immer noch nicht, wie ich damit umgehen soll.
quelle
Es ist einige Zeit vergangen, seit die meisten dieser Antworten veröffentlicht wurden, und einige verwenden veraltete Methoden und Konstanten.
Ich habe Jareks Code aktualisiert , um diese Methoden und Konstanten nicht mehr zu verwenden:
Beachten Sie, dass der Modus
Configuration.ORIENTATION_SQUARE
nicht mehr unterstützt wird.Ich fand dies auf allen Geräten, auf denen ich es getestet habe, zuverlässig, im Gegensatz zu der Methode, die die Verwendung von vorschlägt
getResources().getConfiguration().orientation
quelle
Überprüfen Sie die Bildschirmausrichtung zur Laufzeit.
quelle
Es gibt noch eine Möglichkeit:
quelle
Das Android SDK kann Ihnen Folgendes sagen:
quelle
Getestet im Jahr 2019 auf API 28, unabhängig davon, ob der Benutzer die Hochformatausrichtung festgelegt hat oder nicht, und mit minimalem Code im Vergleich zu einer anderen, veralteten Antwort liefert das Folgende die richtige Ausrichtung:
quelle
Ich denke, dieser Code funktioniert möglicherweise, nachdem die Änderung der Ausrichtung wirksam geworden ist
Überschreiben Sie die Funktion Activity.onConfigurationChanged (Configuration newConfig) und verwenden Sie newConfig, Ausrichtung, wenn Sie vor dem Aufruf von setContentView über die neue Ausrichtung benachrichtigt werden möchten.
quelle
Ich denke, die Verwendung von getRotationv () hilft nicht, da http://developer.android.com/reference/android/view/Display.html#getRotation%28%29 getRotation () die Drehung des Bildschirms von seiner "natürlichen" zurückgibt. Orientierung.
Wenn Sie also die "natürliche" Ausrichtung nicht kennen, ist die Rotation bedeutungslos.
Ich habe einen einfacheren Weg gefunden,
Bitte sagen Sie mir, ob es ein Problem mit dieser Person gibt.
quelle
Dies ist eine Überlagerung aller Telefone wie oneplus3
richtiger Code wie folgt:
quelle
Alter Beitrag, den ich kenne. Unabhängig von der Ausrichtung oder dem Austausch usw. habe ich diese Funktion entwickelt, mit der das Gerät in die richtige Ausrichtung gebracht wird, ohne dass Sie wissen müssen, wie die Hoch- und Querformatfunktionen auf dem Gerät organisiert sind.
Klappt wunderbar!
quelle
Verwenden Sie diesen Weg,
In der Zeichenfolge haben Sie das Oriantion
quelle
Es gibt viele Möglichkeiten, dies zu tun. Dieser Code funktioniert für mich
quelle
Ich finde diese Lösung einfach
quelle
Nur einfacher zweizeiliger Code
quelle
Simpel und einfach :)
Schreiben Sie in die Java-Datei:
bei
onCreate
Methode und vor demsetContentView
Schreiben:quelle
Es ist auch erwähnenswert, dass es heutzutage weniger gute Gründe gibt, die explizite Ausrichtung zu überprüfen,
getResources().getConfiguration().orientation
wenn Sie dies aus Layoutgründen tun, da die in Android 7 / API 24+ eingeführte Unterstützung für mehrere Fenster Ihre Layouts in beiden Fällen erheblich beeinträchtigen könnte Orientierung. Es ist besser, die Verwendung<ConstraintLayout>
und alternative Layouts in Betracht zu ziehen , die von der verfügbaren Breite oder Höhe abhängen , sowie andere Tricks, um zu bestimmen, welches Layout verwendet wird, z. B. das Vorhandensein oder Nichtvorhandensein bestimmter Fragmente, die an Ihre Aktivität angehängt sind.quelle
Sie können dies verwenden (basierend auf hier ):
quelle