Fungsi Android View.setPadding(int left, int top, int right, int bottom)hanya menerima nilai dalam px tetapi saya ingin mengatur padding dalam dp. Apakah ada jalan lain?
Jawaban:
Langsung ke kode
int padding_in_dp = 6; // 6 dps
final float scale = getResources().getDisplayMetrics().density;
int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
getResources()adalah fungsi yang diwarisi oleh aktivitas, tetapi saya mencoba menggunakan baris ini dalam adaptor listview kustom. Adakah cara agar saya dapat melakukan ini jika saya tidak dapat menelepon getResources()?
Jika Anda menentukan dimensi (dalam dp atau apa pun) dalam file XML (yang lebih baik, setidaknya dalam banyak kasus), Anda bisa mendapatkan nilai pikselnya menggunakan kode ini:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Ada cara yang lebih baik untuk mengonversi nilai menjadi dp secara terprogram:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Kemudian terapkan dpValueke metode Anda, misalnya:setPadding(dpValue,dpValue,dpValue,dpValue);
Anda dapat menghitung piksel untuk nilai DPI tertentu: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
Saya memiliki masalah yang sama. Satu-satunya solusi yang saya temukan (ini tidak akan benar-benar membantu Anda :)) adalah dengan mengaturnya di file Xml.
Jika Anda bisa mendapatkan kepadatan dari kode, Anda dapat menggunakan konversi: "Konversi unit dip menjadi piksel layar sederhana: piksel = dips * (kepadatan / 160)." (dari http://developer.android.com/guide/practices/screens_support.html )
Edit: Anda bisa mendapatkan kerapatan layar: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi