如何将 Android 的 DP 转换为 Flutter 的 LP? DP和LP有啥区别?

Posted

技术标签:

【中文标题】如何将 Android 的 DP 转换为 Flutter 的 LP? DP和LP有啥区别?【英文标题】:How to convert Android's DP to Flutter's LP? What is the difference between DP and LP?如何将 Android 的 DP 转换为 Flutter 的 LP? DP和LP有什么区别? 【发布时间】:2019-07-28 16:39:18 【问题描述】:

我得到了一个新应用的设计。所有尺寸均适用于 android,并以 DP -(与密度无关的像素)给出。如何将这些值转换为 Flutter 的 LP逻辑像素)。 我知道Window.devicePixelRatio 为我提供了每个逻辑像素的设备像素数。

DP 和 LP 之间的确切区别是什么? dp 到 lp 转换是否有任何内置方法?

【问题讨论】:

【参考方案1】:

根据文档(window.devicePixelRatio 和 Flutter for Android Developers),DP 和 LP 没有区别。

设备像素也称为物理像素。逻辑像素也称为独立于设备或独立于分辨率的像素。

Flutter 没有dps 但有逻辑像素,与设备无关像素基本相同。所谓devicePixelRatio,表示的是单个逻辑像素中物理像素的比例。

【讨论】:

【参考方案2】:

您可以使用下面的代码让您的手机屏幕响应:

double getHeight(double screenHeightofthedeviceYouAreDebuging,BuildContextcontext,double size)


     return (MediaQuery.of(context).size.height / screenHeight) * size;

 

因此,如果您使用 5 in screen 进行调试,则屏幕高度将为 640 或 MediaQuery.of(context).size。 (宽度和高度)将为您提供测试设备的屏幕尺寸 screen Height of the device You Are Debuging = 640 context = BuildContext size = size you want to be as you image , container etc height 。 所以它会根据使用的设备转换屏幕的大小

double getWidth(double screenWidthofthedeviceYouAreDebuging,BuildContext context,double size)

  return (MediaQuery.of(context).size.width / screenHeight) * size;



EdgeInsets padding(top,bottom,left,right,context)
    return EdgeInsets.only(
      top: getHeight(640, context, top),
      bottom: getHeight(640, context, bottom),
      left: getHeight(640, context, left),
      right: getHeight(640, context, right));

【讨论】:

【参考方案3】:

根据https://api.flutter.dev/flutter/dart-ui/FlutterView/devicePixelRatio.html,物理显示器每厘米大约有 38 个逻辑像素,或每英寸大约有 96 个逻辑像素。

根据https://developer.android.com/training/multiscreen/screendensities,One,dp 是一个虚拟像素单位,大致等于中等密度屏幕(160dpi;“基线”密度)上的一个像素。

所以我们可以说:

160 dp == 1 英寸 == 96 lp

【讨论】:

以上是关于如何将 Android 的 DP 转换为 Flutter 的 LP? DP和LP有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Jetpack Compose 中将 Dp 转换为像素?

如何在android中将vw测量转换为dp?

Android开发中dp,sp和px之间的转换

android px,dp,sp大小转换工具

Android dp和px之间转换 及 获取坐标

Android GridView——如何以dp单位使用setColumnWidth()设置宽度