android widget高度_(四) Flutter入门学习之Widget布局

本文介绍了Flutter中常见的单子布局组件,包括Align、Center、Padding和Container,详细讲解了它们的属性和使用方法。此外,还探讨了多子布局组件Row、Column和Stack,讲解了它们在主轴和交叉轴上的对齐方式,以及如何通过Expanded实现灵活的布局。通过对这些组件的学习,读者能够更好地掌握Flutter的布局设计。
摘要由CSDN通过智能技术生成

为了实现界面内组件的各种排布方式,我们需要进行布局,和其他端不同的是,Flutter中因为万物皆Widget,所以布局也是使用Widget来完成的。

Flutter中的布局组件非常多,有31个用于布局的组件,Flutter布局组件[1]

在学习的过程中,我们没必要一个个全部掌握,掌握最常用的,一些特殊的组件用到时去查文档即可;

Flutter将布局组件分成了 单子布局组件(Single-child layout widgets) 和 多子布局组件(Multi-child layout widgets)

一. 单子布局组件

单子布局组件的含义是其只有一个子组件,可以通过设置一些属性设置该子组件所在的位置信息等。

比较常用的单子布局组件有:Align、Center、Padding、Container。

1.1. Align组件

1.1.1. Align介绍

看到Align这个词,我们就知道它有我们的对齐方式有关。

在其他端的开发中(iOS、Android、前端)Align通常只是一个属性而已,但是Flutter中Align也是一个组件。

我们可以通过源码来看一下Align有哪些属性:

const Align({  Key key,  this.alignment: Alignment.center, // 对齐方式,默认居中对齐  this.widthFactor, // 宽度因子,不设置的情况,会尽可能大  this.heightFactor, // 高度因子,不设置的情况,会尽可能大  Widget child // 要布局的子Widget})

这里我们特别解释一下widthFactor和heightFactor作用:

  • 因为子组件在父组件中的对齐方式必须有一个前提,就是父组件得知道自己的范围(宽度和高度);
  • 如果widthFactor和heightFactor不设置,那么默认Align会尽可能的大(尽可能占据自己所在的父组件);
  • 我们也可以对它们进行设置,比如widthFactor设置为3,那么相对于Align的宽度是子组件跨度的3倍;
1.1.2. Align演练

我们简单演练一下Align

class MyHomeBody extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Align(      child: Icon(Icons.pets, size: 36, color: Colors.red),      alignment: Alignment.bottomRight,      widthFactor: 3,      heightFactor: 3,    );  }}
8c3368ad7683dceb539036d5b7a82719.png

1.2. Center组件

1.2.1. Center介绍

Center组件我们在前面已经用过很多次了。

事实上Center组件继承自Align,只是将alignment设置为Alignment.center。

源码分析:

class Center extends Align {  const Center({    Key key,    double widthFactor,    double heightFactor,    Widget child  }) : super(key: key, widthFactor: widthFactor, heightFactor: heightFactor, child: child);}

1.2.2. Center演练

我们将上面的代码Align换成Center

class MyHomeBody extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Center(      child: Icon(Icons.pets, size: 36, color: Colors.red),      widthFactor: 3,      heightFactor: 3,    );  }}
b6a54a6679a8c0e09fe7888f6c8f978c.png

1.3. Padding组件

1.3.1. Padding介绍

Padding组件在其他端也是一个属性而已,但是在Flutter中是一个Widget,但是Flutter中没有Margin这样一个Widget,这是因为外边距也可以通过Padding来完成。

Padding通常用于设置子Widget到父Widget的边距(你可以称之为是父组件的内边距或子Widget的外边距)。

源码分析:

const Padding({  Key key,  @required this.padding, // EdgeInsetsGeometry类型(抽象类),使用EdgeInsets  Widget child,})

1.3.2. Padding演练

代码演练:

class MyHomeBody extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Padding(      padding: EdgeInsets.all(20),      child: Text(        "莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值