Lebih
Mengkonversi piksel untuk dp
Saya telah menciptakan aplikasi saya dengan tinggi dan lebar yang diberikan dalam piksel untuk Pantech perangkat dan resolusi 480x800.
Saya perlu untuk mengubah tinggi dan lebar untuk G1 perangkat. Saya pikir mengubahnya menjadi dp akan memecahkan masalah dan memberikan solusi yang sama untuk kedua perangkat.
Apakah ada cara mudah untuk mengkonversi piksel untuk dp? Ada saran?
782
34
Sebaiknya dimasukkan ke dalam Util.java kelas
kepadatan
sama dengan.75
onldpi
(120
dpi)1.0
onmdpi
(160
dpi; baseline)1.5
onhdpi
(240
dpi)2.0
padaxhdpi
(320
dpi)3.0
onxxhdpi
(480
dpi)4.0
onxxxhdpi
(640
dpi)Gunakan ini converter online untuk bermain-main dengan nilai-nilai dpi.
EDIT: Tampaknya tidak ada hubungan 1:1 antara
dpi
ember dankepadatan
. SepertinyaNexus 5X
menjadixxhdpi
memilikikepadatan
nilai2.625
(bukan3
). Lihat sendiri di Perangkat Metrik.Jika anda dapat menggunakan dimensi XML itu's sangat sederhana!
Dalam
res/values/dimens.xml
:Kemudian di Jawa:
Anda dapat menggunakan ini .. tanpa Konteks
Seperti @Stan disebutkan .. menggunakan pendekatan ini dapat menyebabkan masalah jika sistem perubahan densitas. Jadi harus tahu itu!
Secara pribadi saya menggunakan Konteks untuk melakukan itu. It's just another pendekatan yang saya ingin berbagi dengan anda
Menurut Android Panduan Pengembangan:
Namun seringkali anda'll ingin melakukan hal ini dengan cara lain ketika anda menerima sebuah desain yang's dinyatakan dalam satuan piksel. Jadi:
Jika anda're pada 240dpi perangkat rasio ini adalah 1.5 (seperti yang dinyatakan sebelumnya), jadi ini berarti bahwa 60px ikon sama dengan 40dp dalam aplikasi.
Tanpa
Konteks
, elegan metode statis:Untuk
DP untuk Pixel
Menciptakan nilai dalam
dimens.xml
Mendapatkan nilai di
pixel
sebagai:Oleh karena itu anda dapat menggunakan berikut perumus untuk menghitung jumlah yang tepat dari piksel dari dimensi yang ditentukan dalam dp
Bagi siapa saja yang menggunakan Kotlin:
Penggunaan:
Ada default util di android SDK: http://developer.android.com/reference/android/util/TypedValue.html
menggunakan kotlin-ekstensi membuatnya lebih baik
UPDATE:
Karena
displayMetrics
adalah bagian dari global sumber Daya bersama, kita dapat menggunakan sumber Daya.getSystem()`Ini akan memberikan anda konversi dp untuk piksel:
Ini akan memberikan anda kode piksel konversi untuk dp:
Kotlin
Java
Mungkin cara terbaik jika anda memiliki dimensi dalam nilai-nilai/dimen adalah untuk mendapatkan dimensi langsung dari getDimension() metode ini akan mengembalikan anda dimensi sudah dikonversi ke nilai pixel.
Hanya untuk lebih menjelaskan hal ini,
akan kembali dimensi yang sudah dikonversi ke pixel SEBAGAI PELAMPUNG.
akan kembali sama tapi dipotong ke int, jadi SEBAGAI Bilangan BULAT.
Lihat Android referensi
Untuk mengkonversi dp untuk pixel.
Untuk mengkonversi pixel untuk dp.
di mana sumber daya konteks.getResources().
Lebih elegan dengan menggunakan pendekatan kotlin's ekstensi fungsi
Penggunaan:
seperti ini:
tergantung pada Konteks, kembali float nilai, metode statis
dari: https://github.com/Trinea/android-common/blob/master/src/cn/trinea/android/common/util/ScreenUtils.java#L15
Dalam kasus anda mengembangkan kinerja kritis aplikasi, silakan mempertimbangkan berikut dioptimalkan kelas: