美文网首页现代前端指南!
Flutter布局组件<对齐与相对定位Align>

Flutter布局组件<对齐与相对定位Align>

作者: 怡红快绿 | 来源:发表于2020-01-20 09:32 被阅读0次

Flutter入门笔记系列文章部分内容来源于《Flutter 实战》,如有侵权请联系删除!

Align

Align 组件可以调整子组件的位置,并且可以根据子组件的宽高来确定自身的的宽高。

const Align({
  Key key,
  this.alignment = Alignment.center,
  this.widthFactor,
  this.heightFactor,
  Widget child,
})
  • alignment : 需要一个AlignmentGeometry类型的值,表示子组件在父组件中的起始位置。AlignmentGeometry 是一个抽象类,它有两个常用的子类:Alignment和 FractionalOffset,我们将在下面的示例中详细介绍。
  • widthFactor和heightFactor是用于确定Align 组件本身宽高的属性;它们是两个缩放因子,会分别乘以子元素的宽、高,最终的结果就是Align 组件的宽高。如果值为null,则组件的宽高将会占用尽可能多的空间。
body: Container(
    color: Colors.blue,
    child: Align(
      alignment: Alignment.bottomRight,
      heightFactor: 2,
      widthFactor: 2,
      child: RaisedButton(
        onPressed: () {},
        child: Text("Align"),
      ),
    )),

运行效果


factor

Alignment

Alignment继承自AlignmentGeometry,表示矩形内的一个点,他有两个属性xy,分别表示在水平和垂直方向的偏移,Alignment定义如下:

Alignment(this.x, this.y)

Alignment Widget会以矩形的中心点作为坐标原点,即Alignment(0.0, 0.0)xy的值从-1到1分别代表矩形左边到右边的距离和顶部到底边的距离,因此2个水平(或垂直)单位则等于矩形的宽(或高),如Alignment(-1.0, -1.0) 代表矩形的左侧顶点,而Alignment(1.0, 1.0)代表右侧底部终点,而Alignment(1.0, -1.0) 则正是右侧顶点,即Alignment.topRight。为了使用方便,矩形的原点、四个顶点,以及四条边的终点在Alignment类中都已经定义为了静态常量。

Alignment可以通过其坐标转换公式将其坐标转为子元素的具体偏移坐标:

(Alignment.x*childWidth/2+childWidth/2, Alignment.y*childHeight/2+childHeight/2)

其中childWidth为子元素的宽度,childHeight为子元素高度。

现在我们再看看上面的示例,我们将Alignment(1.0, -1.0)带入上面公式,可得FlutterLogo的实际偏移坐标正是(60,0)。下面再看一个例子:

 Align(
  widthFactor: 2,
  heightFactor: 2,
  alignment: Alignment(2,0.0),
  child: FlutterLogo(
    size: 60,
  ),
)

我们可以先想象一下运行效果:将Alignment(2,0.0)带入上述坐标转换公式,可以得到FlutterLogo的实际偏移坐标为(90,30)。实际运行如图4-12所示:

图4-12

FractionalOffset

FractionalOffset 继承自 Alignment,它和 Alignment唯一的区别就是坐标原点不同!FractionalOffset 的坐标原点为矩形的左侧顶点,这和布局系统的一致,所以理解起来会比较容易。FractionalOffset的坐标转换公式为:

实际偏移 = (FractionalOffse.x * childWidth, FractionalOffse.y * childHeight)

下面看一个例子:

Container(
  height: 120.0,
  width: 120.0,
  color: Colors.blue[50],
  child: Align(
    alignment: FractionalOffset(0.2, 0.6),
    child: FlutterLogo(
      size: 60,
    ),
  ),
)

实际运行效果如图4-13所示下:

图4-13

我们将FractionalOffset(0.2, 0.6)带入坐标转换公式得FlutterLogo实际偏移为(12,36),和实际运行效果吻合。

在此建议读者在需要制定一些精确的偏移时应优先使用FractionalOffset,因为它的坐标原点和布局系统相同,能更容易算出实际偏移。

相关文章

  • Flutter布局组件<对齐与相对定位Align>

    Flutter入门笔记系列文章部分内容来源于《Flutter 实战》,如有侵权请联系删除! Align Align...

  • Flutter 3. 页面布局

    Flutter中布局组件众多,大致有: Align: 对齐布局组件,指定child的对齐方式 AspectRati...

  • 常见布局+Logcat+文件读写操作+sd卡

    常见布局 相对布局 RelativeLayout 组件默认左对齐、顶部对齐 设置组件在指定组件的右边 andr...

  • Flutter 组件

    Align对齐布局,指定child的对齐方式 AspectRatio调整宽高比,根据设置的宽高比调整child组件...

  • Flutter 布局样式

    在 Flutter 里布局需要使用特定的布局组件,其核心的组件包括了:Align、Stack、Row、Center...

  • Flutter七:Flutter布局类Widget

    提纲 基础布局: 居中(Center)对齐(Align)线性布局(Row与Column)弹性布局(Flex)缩放布...

  • CSS网格布局学习(6)

    CSS网格布局也具有与 flex 布局一样的"盒模型对齐"。例如属性 align-items、align-self...

  • 20-Flutter对齐布局 - Align与Center

    1. Align 对齐子组件 1.1 widthFactor 和 heightFactor 决定Align的的大...

  • 关于rust的内存布局

    常用类型 一般类型的布局是其大小(size)、对齐方式(align)及其字段的相对偏移量: 对于枚举,如何布局和解...

  • 对齐与相对定位

    Align Align 组件可以调整子组件的位置,并且可以根据子组件的宽高来确定自身的的宽高,定义如下: Alig...

网友评论

    本文标题:Flutter布局组件<对齐与相对定位Align>

    本文链接:https://www.haomeiwen.com/subject/dtyrzctx.html