Aku melakukan:
button.setLayoutParams(new GridView.LayoutParams(65, 65));
Menurut dokumen, satuan untuk lebar dan tinggi (keduanya 65 di atas) adalah "piksel". Bagaimana Anda memaksakan ini menjadi piksel independen perangkat, atau "dp"?
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
kepx
? Terima kasih.Saya tahu ini adalah pertanyaan lama namun saya telah menemukan cara yang jauh lebih rapi dalam melakukan konversi ini.
Jawa
Kotlin
sumber
65
atas adalah nilai DP yang ingin Anda konversi ke PXMelihat 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:
Dan dimens.xml Anda akan memiliki:
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.
sumber
Cara paling sederhana (dan bahkan bekerja dari api 1) yang diuji adalah:
Dari dokumentasi:
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.
sumber