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

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

Sharj asked 2019-09-10T20:46:20Z
5个解决方案
173 votes

直接编码

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
Labeeb Panampullan answered 2019-09-10T20:46:33Z
87 votes

如果您在XML文件中定义维度(以dp或其他为单位)(无论如何,至少在大多数情况下更好),您可以使用以下代码获取它的像素值:

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Michael Sparmann answered 2019-09-10T20:46:57Z
1 votes

有一种更好的方法可以以编程方式将值转换为dp:

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());

然后将dpValue应用于您的方法,例如:setPadding(dpValue,dpValue,dpValue,dpValue);

wapn answered 2019-09-10T20:47:28Z
0 votes

您可以计算特定DPI值的像素:[http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31]

Moss answered 2019-09-10T20:47:52Z
0 votes

我有同样的问题。 我发现的唯一解决方案(它不会真正帮助你:))是在Xml文件中设置它。

如果你可以从代码中获得密度,你可以使用转换:“dip单位到屏幕像素的转换很简单:像素= dips *(密度/ 160)。” (来自[http://developer.android.com/guide/practices/screens_support.html])

编辑:您可以获得屏幕密度:[http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi]

Khetzal answered 2019-09-10T20:48:29Z
translate from https://stackoverflow.com:/questions/4275797/view-setpadding-accepts-only-in-px-is-there-anyway-to-setpadding-in-dp