Android函数View.setPadding(int left, int top, int right, int bottom)
只接受px中的值,但我想在dp中设置填充。有什么方法吗?
答案 0 :(得分:175)
直接编码
int padding_in_dp = 6; // 6 dps
final float scale = getResources().getDisplayMetrics().density;
int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
答案 1 :(得分:87)
如果您在XML文件中定义维度(以dp或其他为单位)(无论如何,至少在大多数情况下是这样),您可以使用以下代码获取它的像素值:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
答案 2 :(得分:1)
有一种更好的方法可以通过编程将值转换为dp:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
然后将dpValue
应用于您的方法,例如:setPadding(dpValue,dpValue,dpValue,dpValue);
答案 3 :(得分:0)
答案 4 :(得分:0)
我遇到了同样的问题。我发现的唯一解决方案(它不会真正帮助你:))是在Xml文件中设置它。
如果你可以从代码中获得密度,你可以使用转换:“dip单位到屏幕像素的转换很简单:像素= dips *(密度/ 160)。” (来自http://developer.android.com/guide/practices/screens_support.html)
编辑:您可以获得屏幕密度:http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi
答案 5 :(得分:0)
这是根据公认的答案得出的Kotlin版本:
fun dpToPx(dp: Int): Int {
val scale = resources.displayMetrics.density
return (dp * scale + 0.5f).toInt()
}