Bagaimana cara mendapatkan kerapatan layar secara terprogram di android?
Maksud saya: Bagaimana menemukan dpi layar perangkat saat ini?
android
dpi
screen-density
Praveen
sumber
sumber
getDisplayMetrics().xdpi
, yang seharusnya mengembalikan dpi perangkat yang sebenarnya. Harap perhatikan bahwa nilai ini tidak ditetapkan secara konsisten di seluruh perangkat oleh pabrikan, jadi Anda tidak dapat menggunakannya . Sedih tetapi benar: informasi tentang dpi nyata tidak tersedia . Sumber: groups.google.com/d/msg/android-developers/g56jV0Hora0/…getResources().getDisplayMetrics().xdpi
dangetResources().getDisplayMetrics().ydpi
akan memberi Anda kepadatan horisontal dan vertikal yang sebenarnya , yang dalam banyak kasus berbeda.Jawaban:
Anda bisa mendapatkan info tentang tampilan dari struct DisplayMetrics :
Meskipun Android tidak menggunakan pemetaan piksel langsung, ia menggunakan beberapa nilai Density Independent Pixel yang dikuantisasi kemudian menskala ke ukuran layar aktual. Jadi
metrics.densityDpi
properti akan menjadi salah satuDENSITY_xxx
konstanta (120
,160
,213
,240
,320
,480
atau640
dpi).Jika Anda membutuhkan kerapatan piksel lcd yang sebenarnya (mungkin untuk aplikasi OpenGL), Anda bisa mendapatkannya dari
metrics.xdpi
danmetrics.ydpi
properti untuk kerapatan horizontal dan vertikal.Jika Anda menargetkan Tingkat API lebih awal dari 4.
metrics.density
Properti adalah faktor penskalaan titik mengambang dari kepadatan referensi (160dpi). Nilai yang sama sekarang disediakan olehmetrics.densityDpi
dapat dihitungsumber
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
Ini secara resmi ditambahkan di API 17, tetapi saya terkejut menemukan bahwa itu berfungsi dengan benar bahkan pada perangkat 4.0 yang saya coba.Ini juga berfungsi:
Ini akan memberi Anda:
0,75 - ldpi
1.0 - mdpi
1,5 - hdpi
2.0 - xhdpi
3.0 - xxhdpi
4.0 - xxxhdpi
ref: density
ref 2
sumber
WindowManager
(mis. Di dalam Loader). Cukup kalikan dengan 160tvdpi
. Untuk info lebih lanjuttvdpi
lihat di siniIni akan bekerja pada API level 4 dan lebih tinggi.
sumber
Jawaban Blundell sebagai metode pembantu statis:
sumber
Coba ini:
sumber
View
lebih mudah (di situlah saya membutuhkannya!)Untuk mendapatkan dpi:
sumber
Berikut adalah konstanta densitas, sumber :
Ada, selain kepadatan standar, 5 yang Menengah. Dengan mempertimbangkan fakta ini, kode berikut akan menjadi contoh kerja yang lengkap:
Atau, Anda dapat menemukan konstanta kerapatan menggunakan
densityDpi
:sumber
Jawaban berikut adalah peningkatan kecil berdasarkan jawaban qwertzguy.
sumber
Sebenarnya jika Anda ingin memiliki tampilan nyata dpi , jawabannya ada di antara keduanya jika Anda meminta metrik tampilan:
densityDpi * 160 akan memberi Anda nilai / saran kepadatan mana yang harus Anda gunakan
seperti yang ditentukan dalam posting sebelumnya
tetapi
dm.xdpi
tidak akan selalu memberi Anda dpi NYATA dari tampilan yang diberikan: Contoh:jadi mungkin nyata dpi tampilan harus Density * xdpi .. tapi saya tidak yakin apakah ini cara yang benar untuk dilakukan!
sumber
Ini akan membantu aktivitas Anda ...
OUTPUT:
sumber
sumber
Jika Anda ingin mengambil kepadatan dari Layanan berfungsi seperti ini:
sumber
Anda Harus Coba Ini. Baru Ditambahkan Metode yang akan menemukan dan Tampilkan Roti Panggang. Bahwa dalam Kategori Yang Perangkat Jatuh.
http://www.androidwarriors.com/2016/01/how-to-find-different-devices-screen.html
sumber
Ini seharusnya bekerja.
sumber
Namun jawaban lain:
sumber
Cara lain untuk mendapatkan kepadatan yang dimuat oleh perangkat:
Buat
values
folder untuk setiap kepadatanTambahkan sumber string di masing-masing
strings.xml
:Maka cukup dapatkan sumber daya string, dan Anda memiliki kepadatan:
Jika kerapatan lebih besar dari
XXXHDPI
, itu akan default keXXXHDPI
atau jika lebih rendah daripadaHDPI
itu akan default untukMDPI
Saya ketinggalan
LDPI
, karena untuk use case saya tidak perlu.sumber
Coba ini...
Di kotlin
Anda dapat menelepon oleh
println("density: ${determineScreenDensityCode()}")
dan hasilnya akanSystem.out: density: xxxhdpi
sumber
Saya menggunakan kode berikut untuk mengakses DPI dari modul (tidak perlu memiliki akses ke objek konteks):
sumber
Di Android Anda bisa mendapatkan kerapatan layar seperti ini:
Dan di Kotlin seperti ini:
Pastikan untuk memeriksa secara teratur jika kepadatan baru ditambahkan .
sumber