Câu trả lời:
Đi thẳng đến mã
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()là một hàm được kế thừa bởi một hoạt động, nhưng tôi đang cố gắng sử dụng những dòng này trong bộ điều hợp listview tùy chỉnh. Có cách nào tôi có thể làm điều này nếu tôi không gọi được getResources()không?
Nếu bạn xác định thứ nguyên (bằng dp hoặc bất cứ thứ gì) trong tệp XML (dù sao thì tốt hơn, ít nhất là trong hầu hết các trường hợp), bạn có thể nhận được giá trị pixel của nó bằng cách sử dụng mã này:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Có một cách tốt hơn để chuyển đổi giá trị sang dp theo chương trình:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Sau đó, áp dụng dpValuecho phương pháp của bạn, ví dụ:setPadding(dpValue,dpValue,dpValue,dpValue);
Bạn có thể tính toán các pixel cho một giá trị DPI cụ thể: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
Tôi cùng một vấn đề. Giải pháp duy nhất tôi đã tìm thấy (nó sẽ không thực sự giúp bạn :)) là đặt nó trong tệp Xml.
Nếu bạn có thể lấy mật độ từ mã, bạn có thể sử dụng chuyển đổi: "Việc chuyển đổi đơn vị nhúng sang pixel màn hình rất đơn giản: pixel = dips * (mật độ / 160)." (từ http://developer.android.com/guide/practices/screens_support.html )
Chỉnh sửa: bạn có thể lấy mật độ màn hình: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi