Bagaimana saya bisa mengecek apakah ponsel Android dalam Landscape atau Portrait?
java
android
orientation
Mohit Deshpande
sumber
sumber
Jawaban:
Konfigurasi saat ini, seperti yang digunakan untuk menentukan sumber daya yang akan diambil, tersedia dari objek Sumber
Configuration
:Anda dapat memeriksa orientasi dengan melihat nilainya:
Informasi lebih lanjut dapat ditemukan di Pengembang Android .
sumber
android:screenOrientation="portrait"
), metode ini akan mengembalikan nilai yang sama terlepas dari bagaimana pengguna memutar perangkat. Dalam hal ini Anda akan menggunakan accelerometer atau sensor gravitasi untuk mengetahui orientasi dengan benar.Jika Anda menggunakan orientasi getResources (). GetConfiguration (). Pada beberapa perangkat, Anda akan salah. Kami menggunakan pendekatan itu pada awalnya di http://apphance.com . Berkat pendataan jarak jauh Apphance kami dapat melihatnya di perangkat yang berbeda dan kami melihat bahwa fragmentasi memainkan perannya di sini. Saya melihat kasus-kasus aneh: misalnya bergantian potret dan persegi (?!) di HTC Desire HD:
atau tidak mengubah orientasi sama sekali:
Di sisi lain, lebar () dan tinggi () selalu benar (digunakan oleh manajer jendela, jadi seharusnya lebih baik). Saya akan mengatakan ide terbaik adalah melakukan pengecekan lebar / tinggi SELALU. Jika Anda berpikir tentang sesaat, inilah yang Anda inginkan - untuk mengetahui apakah lebar lebih kecil dari tinggi (potret), kebalikan (lanskap) atau jika sama (persegi).
Lalu turun ke kode sederhana ini:
sumber
getWidth
dangetHeight
tidak usang.getSize(Point outSize)
sebagai gantinya. Saya menggunakan API 23.Cara lain untuk memecahkan masalah ini adalah dengan tidak mengandalkan nilai pengembalian yang benar dari layar tetapi mengandalkan penyelesaian sumber daya Android.
Buat file
layouts.xml
di folderres/values-land
danres/values-port
dengan konten berikut:res / values-land / layouts.xml:
res / values-port / layouts.xml:
Dalam kode sumber Anda sekarang Anda dapat mengakses orientasi saat ini sebagai berikut:
sumber
Cara sepenuhnya menentukan orientasi ponsel saat ini:
Chear Binh Nguyen
sumber
getOrientation()
kerjanya, tetapi ini tidak benar jika menggunakangetRotation()
. Dapatkan"Returns the rotation of the screen from its "natural" orientation."
sumber rotasi . Jadi pada telepon yang mengatakan ROTATION_0 adalah potret cenderung benar, tetapi pada tablet orientasi "alami" kemungkinan lanskap dan ROTATION_0 harus mengembalikan lansekap alih-alih potret.Berikut ini adalah cuplikan cuplikan kode cara mendapatkan orientasi layar direkomendasikan oleh hackbod dan Martijn :
❶ Pemicu saat mengubah Orientasi:
❷ Dapatkan orientasi saat ini sebagai rekomendasi hackbod :
❸Ada solusi alternatif untuk mendapatkan orientasi layar saat ini ❷ ikuti solusi Martijn :
★ Catatan : Saya sudah mencoba keduanya mengimplementasikan ❷ & ❸, tetapi pada RealDevice (NexusOne SDK 2.3) Orientasi mengembalikan orientasi yang salah.
★ Jadi saya sarankan untuk menggunakan solusi ❷ untuk mendapatkan orientasi layar yang memiliki lebih banyak keuntungan: jelas, sederhana dan bekerja seperti pesona.
★ Periksa kembali orientasi dengan hati-hati untuk memastikan benar seperti yang kami harapkan (Mungkin terbatas tergantung pada spesifikasi perangkat fisik)
Semoga ini bisa membantu,
sumber
sumber
Gunakan
getResources().getConfiguration().orientation
dengan cara yang benar.Anda hanya harus waspada terhadap berbagai jenis lanskap, lanskap yang biasanya digunakan perangkat dan lainnya.
Masih tidak mengerti bagaimana cara mengaturnya.
sumber
Beberapa waktu telah berlalu sejak sebagian besar jawaban ini telah diposting dan beberapa menggunakan metode dan konstanta yang sudah tidak digunakan lagi.
Saya telah memperbarui kode Jarek untuk tidak menggunakan metode dan konstanta ini lagi:
Perhatikan bahwa mode
Configuration.ORIENTATION_SQUARE
ini tidak didukung lagi.Saya menemukan ini dapat diandalkan pada semua perangkat saya sudah mengujinya berbeda dengan metode yang menyarankan penggunaan
getResources().getConfiguration().orientation
sumber
Periksa orientasi layar dalam runtime.
sumber
Ada satu cara lagi untuk melakukannya:
sumber
Android SDK dapat memberi tahu Anda ini dengan baik:
sumber
Diuji pada 2019 pada API 28, terlepas dari pengguna telah menetapkan orientasi potret atau tidak, dan dengan kode minimal dibandingkan dengan yang lain, jawaban yang sudah ketinggalan zaman , yang berikut ini memberikan orientasi yang benar:
sumber
Saya pikir kode ini dapat berfungsi setelah perubahan orientasi berlaku
timpa Activity.onConfigurationChanged (Configuration newConfig) berfungsi dan gunakan newConfig, orientasi jika Anda ingin diberitahu tentang orientasi baru sebelum memanggil setContentView.
sumber
saya pikir menggunakan getRotationv () tidak membantu karena http://developer.android.com/reference/android/view/Display.html#getRotation%28%29 getRotation () Mengembalikan rotasi layar dari "alami" orientasi.
jadi kecuali Anda tahu orientasi "alami", rotasi tidak ada artinya.
saya menemukan cara yang lebih mudah,
tolong beri tahu saya jika ada masalah dengan seseorang ini?
sumber
seperti ini overlay semua ponsel seperti oneplus3
kode yang benar sebagai berikut:
sumber
Posting lama saya tahu. Apa pun orientasi mungkin atau ditukar dll. Saya merancang fungsi ini yang digunakan untuk mengatur perangkat dalam orientasi yang benar tanpa perlu tahu bagaimana fitur potret dan lansekap diatur pada perangkat.
Bekerja seperti pesona!
sumber
Gunakan cara ini,
dalam String Anda memiliki Oriantion
sumber
ada banyak cara untuk melakukan ini, kode ini berfungsi untuk saya
sumber
Saya pikir solusi ini mudah
sumber
Hanya dua kode baris sederhana
sumber
Sederhana dan mudah :)
Di file java, tulis:
di
onCreate
metode dan sebelumsetContentView
menulis:sumber
Perlu juga dicatat bahwa saat ini, ada alasan yang kurang bagus untuk memeriksa orientasi eksplisit dengan
getResources().getConfiguration().orientation
jika Anda melakukannya karena alasan tata letak, karena Dukungan Multi-Jendela yang diperkenalkan di Android 7 / API 24+ dapat mengacaukan tata letak Anda sedikit di kedua orientasi. Lebih baik untuk mempertimbangkan penggunaan<ConstraintLayout>
, dan tata letak alternatif bergantung pada lebar atau tinggi yang tersedia , bersama dengan trik lain untuk menentukan tata letak mana yang sedang digunakan, misalnya ada atau tidaknya fragmen tertentu yang melekat pada Aktivitas Anda.sumber
Anda dapat menggunakan ini (berdasarkan di sini ):
sumber