View.setPadding仅在px中接受,无论如何在dp中都有setPadding?

时间:2010-11-25 10:00:46

标签: android android-layout

Android函数View.setPadding(int left, int top, int right, int bottom)只接受px中的值,但我想在dp中设置填充。有什么方法吗?

6 个答案:

答案 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()
}