gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:19:08 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Margins of a LinearLayout, programmatically with dp

(6 个回答)


1年前关闭。




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

最佳答案

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

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;
}
}
});
提示:当您使用常量值时,您可能希望缓存它们而不是一直计算值。

关于java - 如何以编程方式将边距中的 px 转换为 dp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64418554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com