【问题标题】:How to convert px to dp in margins programmatically? [duplicate]如何以编程方式将边距中的 px 转换为 dp? [复制]
【发布时间】:2020-10-18 21:32:09
【问题描述】:

我卡在这了,我不知道如何在 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 值,而不是 px。我真的陷入了困境,无法理解

【问题讨论】:

  • 我不知道如何在我的代码中插入它

标签: java android android-studio constants android-linearlayout


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢,成功了!
猜你喜欢
  • 2011-06-22
  • 2017-04-10
  • 2014-01-12
  • 2012-09-25
  • 1970-01-01
  • 2011-10-03
  • 2017-08-04
  • 2012-01-08
  • 2019-02-08
相关资源
最近更新 更多