Saya perlu kode tata letak widget android menggunakan dip / dp (dalam file java). Saat runtime jika saya kode
int pixel=this.getWindowManager().getDefaultDisplay().getWidth()
,;
ini mengembalikan lebar layar dalam piksel (px). Untuk mengonversi ini menjadi dp, saya memberi kode:
int dp =pixel/(int)getResources().getDisplayMetrics().density ;
Tampaknya ini tidak mengembalikan jawaban yang benar. Saya membuat emulator WVGA800 yang resolusi layarnya 480 kali 800. Ketika menjalankan emulator dan membiarkan kode mencetak nilai-nilai pixel dan dp, itu datang ke 320 di keduanya. Emulator ini adalah 240 dpi yang faktor skalanya adalah 0,75.
android
density-independent-pixel
Khushboo
sumber
sumber
Saya menemukan pertanyaan ini dari Google, dan kemudian saya menemukan solusi mudah yang valid untuk API> = 13.
Untuk referensi di masa mendatang:
Lihat referensi kelas konfigurasi
Edit: Sebagaimana dicatat oleh Nick Baicoianu, pengembalian ini dapat digunakan lebar / tinggi layar (yang seharusnya menjadi orang-orang yang menarik di sebagian besar menggunakan). Jika Anda membutuhkan dimensi tampilan aktual, pertahankan jawaban yang paling atas.
sumber
Anda kehilangan nilai kepadatan standar 160.
Dengan kata lain, jika Anda mendesain tata letak Anda dengan lebar sama dengan 160dip dalam mode potret, itu akan menjadi setengah layar di semua perangkat ldpi / mdpi / hdpi (kecuali tablet, saya pikir)
sumber
DisplayMetrics outMetrics = null; getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
dalam Activity. Kemudian,outMetrics.density
akan memberi Anda faktor skala perangkat saat ini, sebagaimana dinyatakan dalam dokumenBagaimana kalau menggunakan ini?
sumber
sumber
Jawab di kotlin:
sumber
Disederhanakan untuk Kotlin:
sumber
Dapatkan Lebar Layar dan Tinggi dalam hal DP dengan beberapa hiasan bagus:
Langkah 1: Buat antarmuka
Langkah 2: Buat kelas implementer
Langkah 3: Dapatkan lebar dan tinggi dalam aktivitas:
sumber
Jika Anda hanya ingin tahu tentang lebar layar Anda, Anda bisa mencari "lebar layar terkecil" di opsi pengembang Anda. Anda bahkan dapat mengeditnya.
sumber
Coba ini:
sumber
Masalah Anda adalah dengan melempar float ke int, kehilangan presisi. Anda juga harus memperbanyak dengan faktor dan tidak membagi.
Melakukan hal ini:
sumber