如何以编程方式将边距中的 px 转换为 dp?

Hex*_*y21 2 java android constants android-linearlayout android-studio

我陷入了困境,我不知道如何在 MarginLayout 中将 px 转换为 dp
所以这是我的主要 MarginLayout 设置方法

public static void setMargins (View v, int l, int t, int r, int b) {
    if (v.getLayoutParams() instanceof LinearLayout.MarginLayoutParams) {
        LinearLayout.MarginLayoutParams p = (LinearLayout.MarginLayoutParams) v.getLayoutParams();
        p.setMargins(l, t, r, b);
        v.requestLayout();
     }
}
Run Code Online (Sandbox Code Playgroud)

这是在元素更改其 marginLayout 的点击侦听器上

ArrowUp.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if(!Switch){
            setMargins(AdditionalOperations, 0, 0, 0, 800);
            Switch = true;
        }
        else{
            setMargins(AdditionalOperations, 0, 0, 0, 715);
            Switch = false;
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我的目标是将像素转换为 Dp,并以 DP 值(而不是 px)作为边距。我真的陷入了困境,无法理解

Per*_*abs 5

将像素值乘以设备显示密度。

final float density = context.getResources().getDisplayMetrics().density;
final int valueInDp = (int)(valueInPixels * density);
Run Code Online (Sandbox Code Playgroud)

在你的情况下将如下:

ArrowUp.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        final float density = view.getResources().getDisplayMetrics().density;

        if(!Switch){
            setMargins(AdditionalOperations, 0, 0, 0, 800 * density);
            Switch = true;
        }
        else{
            setMargins(AdditionalOperations, 0, 0, 0, 715 * density);
            Switch = false;
       }
   }
});
Run Code Online (Sandbox Code Playgroud)

提示:当您使用常量值时,您可能希望缓存它们而不是一直计算这些值。