Dapatkan layar dimensi dalam piksel
Saya membuat beberapa elemen kustom, dan saya ingin pemrograman menempatkan mereka ke sudut kanan atas (n
piksel dari tepi atas dan m
piksel dari tepi kanan). Oleh karena itu saya perlu untuk mendapatkan layar lebar dan tinggi layar dan kemudian mengatur posisi:
int px = screenWidth - m;
int py = screenHeight - n;
Bagaimana cara saya mendapatkan screenWidth
dan screenHeight
dalam Kegiatan utama?
1797
39
Jika anda ingin menampilkan dimensi dalam piksel yang dapat anda gunakan
getSize
:Jika anda're tidak dalam suatu
Aktivitas
anda bisa mendapatkan defaultDisplay
melaluiWINDOW_SERVICE
:Jika anda berada di sebuah fragmen dan ingin acomplish ini hanya menggunakan Aktivitas.Wm_ net (di Xamarin.Android) atau getActivity().getWindowManager() (di jawa).
Sebelum
getSize
diperkenalkan (di API level 13), anda bisa menggunakangetWidth
dangetHeight
metode yang sekarang usang:Untuk kasus penggunaan anda're menggambarkan namun, margin/padding dalam tata letak tampaknya lebih tepat.
Cara lain adalah: DisplayMetrics
Kita dapat menggunakan
widthPixels
untuk mendapatkan informasi untuk:Contoh:
Salah satu cara adalah:
Itu usang, dan anda harus mencoba kode berikut sebagai gantinya. Dua baris pertama dari kode yang memberi anda
DisplayMetrics
objecs. Benda-benda ini berisi bidang-bidang sepertiheightPixels
,widthPixels
.Ini mungkin tidak menjawab pertanyaan anda, tapi itu bisa berguna untuk tahu (saya cari sendiri ketika saya datang untuk pertanyaan ini) bahwa jika anda perlu Melihat's dimensi tapi kode ini akan dieksekusi ketika tata letak yang belum ditata belum (misalnya di
onCreate()
) anda dapat men-setup sebuahViewTreeObserver.OnGlobalLayoutListener
denganLihat.getViewTreeObserver().addOnGlobalLayoutListener()
dan menempatkan kode yang relevan yang perlu di lihat's dimensi yang ada. Pendengar's callback yang akan dipanggil saat tata letak akan telah ditata.(2012 jawaban, mungkin out of date) Jika anda ingin mendukung pra Honeycomb, anda akan perlu untuk dimasukkan ke dalam kompatibilitas sebelum API 13. Sesuatu seperti:
Tentu saja tak berlaku lagi metode yang pada akhirnya akan diambil dari yang paling baru-baru Sdk, tapi sementara kita masih mengandalkan sebagian besar pengguna kami memiliki Android 2.1, 2.2 dan 2.3, ini adalah apa yang tersisa untuk kita.
Saya telah mencoba semua kemungkinan "solusi" gagal dan saya melihat bahwa Elliott Hughes', "Dalvik Explorer" app selalu menunjukkan dimensi yang benar pada perangkat Android/OS versi. Akhirnya aku melihat-nya proyek open source yang dapat ditemukan di sini: https://code.google.com/p/enh/
Berikut ini's semua kode yang relevan:
EDIT: sedikit peningkatan versi (menghindari menembak pengecualian pada non-didukung versi OS):
Cara paling sederhana:
Untuk mengakses ketinggian status bar untuk perangkat Android, kita lebih memilih cara program untuk mendapatkan ini:
Contoh kode
Variabel
hasil
memberikan tinggi dalam pixel.Untuk akses cepat
Untuk informasi lebih lanjut tentang ketinggian
Title bar
,Navigasi
danContent View
, silakan lihat di Perangkat Android Ukuran Layar.Pertama mendapatkan pemandangan (misalnya. oleh
findViewById()
) dan kemudian anda dapat menggunakan getWidth() di lihat sendiri.Saya memiliki dua fungsi, satu untuk mengirim konteks dan lain semakin tinggi dan lebar dalam pixel:
dan
Isn't ini solusi yang jauh lebih baik? DisplayMetrics dilengkapi dengan semua yang anda butuhkan dan bekerja dari API 1.
Anda juga bisa mendapatkan tampilan yang sebenarnya (termasuk layar dekorasi, seperti Status Bar atau perangkat lunak navigasi) dengan menggunakan getRealMetrics, tapi ini bekerja pada 17+ only.
Aku kehilangan sesuatu?
Untuk secara dinamis scaling menggunakan XML ada atribut yang disebut "android:layout_weight"
Di bawah ini contoh, dimodifikasi dari synic's respon pada ini thread, menunjukkan tombol yang memakan 75% dari layar (berat = .25) dan tampilan teks yang mengambil sisa 25% dari layar (berat = .75).
Ini adalah kode yang saya gunakan untuk tugas:
Tampaknya cukup bersih namun, mengurus bantahan.
Hanya menambah Francesco's jawaban. Para pengamat lain yang lebih tepat, jika anda ingin mengetahui lokasi di jendela atau lokasi di layar ViewTreeObserver.OnPreDrawListener()
Hal ini juga dapat digunakan untuk menemukan atribut-atribut lain dari pandangan yang sebagian besar tidak diketahui pada onCreate() waktu misalnya menggulir posisi, skala posisi.
Menemukan lebar dan tinggi layar:
Dengan menggunakan ini, kita bisa mendapatkan yang terbaru dan di atas SDK 13.
Menggunakan kode berikut dalam Aktivitas.
Perlu untuk mengatakan, bahwa jika anda tidak berada dalam
Kegiatan
, tapi diView
(atau variabelMelihat
jenis dalam lingkup anda), ada tidak perlu menggunakanWINDOW_SERVICE
. Kemudian anda dapat menggunakan setidaknya dua cara.Pertama:
Kedua:
Semua metode ini kami sebut di sini adalah tidak usang.
Saya menemukan ini melakukan trik.
Untuk mendapatkan dimensi layar menggunakan layar metrices
Mendapatkan tinggi dan lebar dalam pixel