likes
comments
collection
share

Flutter适配,只需懂这几招!

作者站长头像
站长
· 阅读数 41

嗨!这里是甜瓜看代码。出去玩了,所以断更了一段时间。回来就开始更文啦,喜欢的话点个赞呗。今天这篇文章我们讨论一下不同设备上如何正确的适配UI界面。

像素密度

  首先,我们需要了解设备的像素密度。设备的像素密度指的是每英寸屏幕上的像素点个数。比如说,一个宽度为1080像素,高度为1920像素,屏幕大小为5英寸的设备,其像素密度为440 PPI(pixels per inch)。Flutter提供了一个名为window.devicePixelRatio的变量,可以用于获取设备的像素密度。我们可以在代码中使用这个变量来动态计算UI界面的大小。

Flutter适配,只需懂这几招!

逻辑像素

   Flutter使用逻辑像素来绘制UI界面,而不是实际的物理像素。逻辑像素是指独立于设备的像素,它们的大小是相对的,不受设备的像素密度影响。Flutter默认的逻辑像素大小是密度无关像素(DP,Density-independent pixels)。DP是一个在设计UI时常用的单位,它将像素的大小转化为与屏幕大小无关的大小,因此在不同的屏幕上UI看起来会有相似的大小。

屏幕适配

   那么如何在不同的设备上适配UI界面呢?Flutter提供了多种屏幕适配方案。

AspectRatio

   AspectRatio小部件可以让子部件保持特定的宽高比。当父部件的大小改变时,子部件的大小也会相应地改变。以下是一个例子:

AspectRatio(
  aspectRatio: 16 / 9,
  child: Container(
    color: Colors.blue,
  ),
)

   上面的代码将一个蓝色的容器包装在一个宽高比为16:9的AspectRatio小部件中,这样子部件的大小将自动调整以适应父部件的大小。

Expanded

   Expanded小部件可以让子部件占据剩余的可用空间。以下是一个例子:

Row(
  children: [
    Expanded(
      child: Container(
        color: Colors.red,
      ),
    ),
    Expanded(
      child: Container(
        color: Colors.blue,
      ),
    ),
  ],
)

   上面的代码将两个红色和蓝色的容器包装在一个行中,每个容器都使用Expanded小部件占据了一半的可用空间。当行的大小改变时,容器的大小也会相应地改变。

MediaQuery

   MediaQuery小部件可以让你访问设备的尺寸和方向。以下是一个例子:

MediaQuery(
  data: MediaQueryData(
    size: Size(400, 800),
    orientation: Orientation.portrait,
  ),
  child: Container(
    color: Colors.red,
  ),
)

   上面的代码将一个红色的容器包装在一个模拟400x800分辨率且方向为纵向的MediaQuery小部件中。这样我们可以在代码中模拟出不同的设备尺寸和方向,以便测试UI适配性。

FractionallySizedBox

   FractionallySizedBox小部件可以让子部件占据父部件的一定比例。以下是一个例子:

Container(
  height: 200,
  child: FractionallySizedBox(
    widthFactor: 0.5,
    child: Container(
      color: Colors.blue,
    ),
  ),
)

   上面的代码将一个高度为200的容器包装在一个占据父容器一半宽度的FractionallySizedBox小部件中。这样子部件的大小将自动调整以适应父部件的大小。

总结

   以上介绍了Flutter中的一些屏幕适配方案,包括AspectRatioExpandedMediaQueryFractionallySizedBox等。通过合理运用这些小部件,我们可以轻松实现在不同设备上的UI适配。

   希望本文能对你屏幕适配提供一些帮助。这里是甜瓜看代码,期待你的关注!

转载自:https://juejin.cn/post/7232309441677082661
评论
请登录