View.setPadding仅接受px,在dp中有setPadding吗?


92

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

Answers:


184

直接编码

    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
嗨,我有一个问题。该公式仅用于填充还是其他?例如矩形的边距或尺寸?
emeraldhieu 2011年

4
这是将dp单位转换为像素单位的公式。您可以在任何地方使用它
Labeeb Panampullan

2
我假设getResources()是一个由活动继承的函数,但是我试图在自定义列表视图适配器中使用这些行。如果我不能打电话,有什么办法可以做到getResources()
Mike Baxter

1
在您的适配器中执行getContext()。getResources()。getDisplayMetrics()。density;
史蒂夫·G.13年

4
是否有关于“ + 0.5f”的解释?
Xavier L.

96

如果您在XML文件中定义尺寸(以dp或其他格式)(无论如何,至少在大多数情况下还是更好),您可以使用以下代码获取其像素值:

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)

2

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

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

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



0

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

如果可以从代码中获得密度,则可以使用以下转换:“将浸入度单位转换为屏幕像素很简单:像素=浸入度*(浓度/ 160)。” (来自http://developer.android.com/guide/practices/screens_support.html

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.