Jak mogę sprawdzić, czy telefon z Androidem jest ustawiony poziomo lub pionowo?
java
android
orientation
Mohit Deshpande
źródło
źródło
Odpowiedzi:
Bieżąca konfiguracja używana do określenia, które zasoby należy pobrać, jest dostępna z
Configuration
obiektu Resources :Możesz sprawdzić orientację, patrząc na jej wartość:
Więcej informacji można znaleźć w Android Developer .
źródło
android:screenOrientation="portrait"
), ta metoda zwróci tę samą wartość niezależnie od tego, w jaki sposób użytkownik obraca urządzenie. W takim przypadku użyjesz akcelerometru lub czujnika grawitacji, aby poprawnie ustalić orientację.Jeśli użyjesz orientacji getResources (). GetConfiguration (). Na niektórych urządzeniach, popełnisz błąd. Takie podejście zastosowaliśmy początkowo w http://apphance.com . Dzięki zdalnemu rejestrowaniu Apphance widzieliśmy go na różnych urządzeniach i widzieliśmy, że fragmentacja odgrywa tutaj swoją rolę. Widziałem dziwne przypadki: na przykład na przemian portret i kwadrat (?!) w telefonie HTC Desire HD:
lub wcale nie zmieniając orientacji:
Z drugiej strony, szerokość () i wysokość () jest zawsze poprawna (jest używana przez menedżera okien, więc powinna być lepsza). Powiedziałbym, że najlepszym pomysłem jest ZAWSZE sprawdzanie szerokości / wysokości. Jeśli myślisz o chwili, właśnie tego chcesz - wiedzieć, czy szerokość jest mniejsza niż wysokość (portret), przeciwnie (krajobraz) lub czy są one takie same (kwadrat).
Sprowadza się to do tego prostego kodu:
źródło
getWidth
igetHeight
nie są przestarzałe.getSize(Point outSize)
zamiast tego. Używam API 23.Innym sposobem rozwiązania tego problemu jest nie poleganie na poprawnej wartości zwracanej z wyświetlacza, ale poleganie na rozwiązaniu zasobów Androida.
Utwórz plik
layouts.xml
w folderachres/values-land
ires/values-port
o następującej treści:res / values-land / layouts.xml:
res / wartości-port / layouts.xml:
W kodzie źródłowym możesz teraz uzyskać dostęp do bieżącej orientacji w następujący sposób:
źródło
Pełny sposób na określenie aktualnej orientacji telefonu:
Chear Binh Nguyen
źródło
getOrientation()
działa, ale nie jest to poprawne, jeśli używaszgetRotation()
. Uzyskaj"Returns the rotation of the screen from its "natural" orientation."
źródło rotacji . Tak więc na telefonie z informacją, że ROTATION_0 jest portretem, prawdopodobnie jest prawidłowa, ale na tablecie jego „naturalna” orientacja jest prawdopodobnie pozioma, a ROTATION_0 powinien zwrócić krajobraz zamiast pionowej.Oto demo fragmentu kodu, jak uzyskać orientację ekranu, zalecane przez hackbod i Martijn :
❶ Uruchom po zmianie orientacji:
❷ Uzyskaj aktualną orientację, ponieważ hackbod zaleca:
❸ Istnieją alternatywne rozwiązania pozwalające uzyskać bieżącą orientację ekranu ❷ postępuj zgodnie z rozwiązaniem Martijn :
★ Uwaga : Próbowałem zarówno zaimplementować ❷, jak i ❸, ale w RealDevice (NexusOne SDK 2.3) Orientacja zwraca niewłaściwą orientację.
★ Więc polecam zastosowane rozwiązanie ❷, aby uzyskać orientację ekranu, która ma więcej zalet: wyraźnie, prosta i działa jak urok.
★ Sprawdź dokładnie zwrot orientacji, aby upewnić się, że jest zgodny z naszymi oczekiwaniami (może być ograniczony w zależności od specyfikacji urządzeń fizycznych)
Mam nadzieję, że to pomoże
źródło
źródło
Użyj
getResources().getConfiguration().orientation
tego we właściwy sposób.Trzeba tylko uważać na różne rodzaje krajobrazów, krajobraz normalnie używany przez urządzenie i drugi.
Nadal nie rozumiem, jak sobie z tym poradzić.
źródło
Minęło trochę czasu, odkąd opublikowano większość tych odpowiedzi, a niektórzy używają obecnie nieaktualnych metod i stałych.
Zaktualizowałem kod Jarka, aby nie używać już tych metod i stałych:
Pamiętaj, że ten tryb
Configuration.ORIENTATION_SQUARE
nie jest już obsługiwany.Przekonałem się, że jest to niezawodne na wszystkich urządzeniach, na których testowałem, w przeciwieństwie do metody sugerującej użycie
getResources().getConfiguration().orientation
źródło
Sprawdź orientację ekranu w czasie wykonywania.
źródło
Jest na to jeszcze jeden sposób:
źródło
Zestaw SDK systemu Android może to dobrze powiedzieć:
źródło
Przetestowany w 2019 roku na API 28, niezależnie od tego, czy użytkownik ustawił orientację pionową, czy nie, a przy minimalnym kodzie w porównaniu z inną, nieaktualną odpowiedzią , poniższe zapewnia prawidłową orientację:
źródło
Myślę, że ten kod może działać po wejściu zmiany orientacji
zastąp funkcję Activity.onConfigurationChanged (Configuration newConfig) i użyj newConfig, orientacji, jeśli chcesz otrzymywać powiadomienia o nowej orientacji przed wywołaniem setContentView.
źródło
myślę, że użycie getRotationv () nie pomaga, ponieważ http://developer.android.com/reference/android/view/Display.html#getRotation%28%29 getRotation () Zwraca obrót ekranu z jego „naturalnego” orientacja.
więc jeśli nie znasz orientacji „naturalnej”, obrót jest bez znaczenia.
znalazłem łatwiejszy sposób,
proszę powiedz mi, czy jest z tym problem?
źródło
taka jest nakładka na wszystkie telefony, takie jak oneplus3
odpowiedni kod w następujący sposób:
źródło
Stary post, który znam. Niezależnie od tego, jaka jest orientacja lub która zostanie zamieniona itp. Zaprojektowałem tę funkcję, która służy do ustawiania urządzenia we właściwej orientacji, bez potrzeby wiedzieć, jak zorganizowane są funkcje portretu i krajobrazu w urządzeniu.
Działa jak marzenie!
źródło
Użyj tego sposobu
w Sznurku masz Oriantion
źródło
jest na to wiele sposobów, ten fragment kodu działa dla mnie
źródło
Myślę, że to rozwiązanie jest łatwe
źródło
Po prostu prosty dwuliniowy kod
źródło
Proste i łatwe :)
W pliku Java napisz:
w
onCreate
metodzie i przedsetContentView
napisz:źródło
Warto również zauważyć, że w dzisiejszych czasach nie ma powodu, aby sprawdzać wyraźną orientację,
getResources().getConfiguration().orientation
jeśli robisz to z powodów układu, ponieważ obsługa wielu okien wprowadzona w systemie Android 7 / API 24+ może dość popsuć układy w obu orientacja. Lepiej rozważyć użycie<ConstraintLayout>
i alternatywne układy zależne od dostępnej szerokości lub wysokości , wraz z innymi sztuczkami w celu ustalenia, który układ jest używany, np. Obecność lub brak niektórych fragmentów dołączanych do działania.źródło
Możesz użyć tego (na podstawie tutaj ):
źródło