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

Sha*_*arj 89 android android-layout

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

Lab*_*lan 178

直接编码

    int padding_in_dp = 6;  // 6 dps
    final float scale = getResources().getDisplayMetrics().density;
    int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
Run Code Online (Sandbox Code Playgroud)

  • 这是[将dp单位转换为像素单位]的公式(http://developer.android.com/guide/practices/screens_support.html#dips-pels).你可以在任何地方使用它 (4认同)
  • 是否有关于“ + 0.5f”的解释? (3认同)
  • 我假设`getResources()`是一个由活动继承的函数,但我试图在自定义列表视图适配器中使用这些行.如果我不能调用`getResources()`,有什么方法可以做到这一点吗? (2认同)

小智 91

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

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Run Code Online (Sandbox Code Playgroud)


wap*_*apn 6

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

int value = 200;
int dpValue = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,        
            context.getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)

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