Jawaban:
Anda harus mengonversinya dari dps ke piksel menggunakan faktor skala tampilan.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
ke px
? Terima kasih.
Saya tahu ini adalah pertanyaan lama namun saya telah menemukan cara yang jauh lebih rapi dalam melakukan konversi ini.
Jawa
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Kotlin
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
atas adalah nilai DP yang ingin Anda konversi ke PX
Melihat kebutuhan Anda, ada solusi alternatif juga. Tampaknya Anda tahu dimensi dalam dp pada waktu kompilasi, sehingga Anda dapat menambahkan entri dimen di sumber daya. Kemudian Anda dapat meminta entri dimen dan itu akan secara otomatis dikonversi ke piksel dalam panggilan ini:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
Dan dimens.xml Anda akan memiliki:
<dimen name="dimen_entry_in_dp">72dp</dimen>
Memperluas ide ini, Anda cukup menyimpan nilai 1dp atau 1sp sebagai entri dimen dan kueri nilai dan menggunakannya sebagai pengganda. Dengan menggunakan pendekatan ini, Anda akan mengisolasi kode dari hal-hal matematika dan bergantung pada perpustakaan untuk melakukan perhitungan.
Cara paling sederhana (dan bahkan bekerja dari api 1) yang diuji adalah:
getResources().getDimensionPixelSize(R.dimen.example_dimen);
Dari dokumentasi:
Ambil dimensi untuk ID sumber daya tertentu untuk digunakan sebagai ukuran dalam piksel mentah. Ini sama dengan getDimension (int), kecuali nilai yang dikembalikan dikonversi ke piksel integer untuk digunakan sebagai ukuran. Konversi ukuran melibatkan pembulatan nilai dasar, dan memastikan bahwa nilai dasar yang tidak nol setidaknya berukuran satu piksel.
Ya itu pembulatan nilainya tetapi tidak terlalu buruk (hanya dalam nilai aneh pada perangkat hdpi dan ldpi perlu menambahkan sedikit nilai ketika ldpi tidak terlalu umum) Saya menguji dalam perangkat xxhdpi yang mengubah 4dp menjadi 16 (piksel) dan itu adalah benar.