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

How to convert px to dp in margins programmatically?

我卡在这了,我不知道如何在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();
     }
}

这是点击侦听器,其中元素更改其 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;
        }
    }
});

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

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

final float density = context.getResources().getDisplayMetrics().density;
final int valueInDp = (int)(valueInPixels * density);

你的情况如下:

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;
       }
   }
});

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