SingleChildScrollView
SingleChildScrollView从名字上来看,就是一个滚动布局,在Java开发Android程序中,滚动布局只能嵌套一个组件,这个控件也一样等价于ScrollView,如果没有使用该控件,而界面组件超出屏幕,也是无法滚动的,同样,它也可以设置滚动的方向,垂直滚动还是水平滚动,具体的使用代码如下:
body: SingleChildScrollView( child: Column( children: <Widget>[ Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), Text("评选赢大奖 | CSDN技术公开课总评选火热进行中",style: TextStyle(fontSize: 33),), ], ), ),
代码就不用多说了,就是使用了这个滑动组件,然后里面全是Text组件,实现效果如下:
FittedBox
FittedBox在官方文档中介绍的并不是很多,但其实在实际的使用中, 使用的还是非常多的,所以非常重要,其主要的功能就是负责对组件进行缩放和位置调整。先来看看它的属性:
属性 | 取值 |
fit | 缩放方式 |
alignment | 对齐方式 |
fit指的是缩放本身占据FittedBox的大小,可以理解为Android里缩放因子scaleType,其默认值是BoxFit.contain。也就是说,假如在FittedBox中给fit设置了BoxFit.contain,那么当其子组件的宽度或高度被缩放到父容器限定的值时,就会被停止缩放。这个组件在后续项目中讲解,这里单独使用效果不是很明显。
FractionallySizedBox
FractionallySizedBox的用途时基于宽度缩放因子和高度缩放因子来调整布局大小的,大小有可能超出其父组件的设置。如果FractionallySizedBox中的子组件设置了大小,它也不会起作用,而会被FractionallySizedBox的宽度缩放因子和高度缩放因子做覆盖,使用代码如下:
body: Container( color: Colors.red, height: 200.0, width: 200.0, child: new FractionallySizedBox( alignment: Alignment.topLeft, widthFactor: 1.5, heightFactor: 0.5, child: new Container( width: 50.0, color: Colors.yellow, ), ), ),
在上述代码中,即使我们对FractionallySizedBox里的Container设置了宽度,也是不起作用的。Flutter值会识别FractionallySizedBox中的widthFactor和heightFactor所设置的值,上述代码实现效果如下:
ConstrainedBox
ConstrainedBox是一种约束限制的布局,在其约定的方位内,比如最大高度,最小宽度,其子组件是不能逾越的,使用的代码如下:
body: ConstrainedBox( constraints: BoxConstraints( minWidth: 100.0, minHeight: 100.0, maxWidth: 250.0, maxHeight: 250.0, ), child: new Container( width: 300.0, height: 300.0, color: Colors.blue, ), ),
这里你设置了300,但其最大只有250,所以最终会显示250的大小,因为其始终不可逾越这种约束布局,实现效果如下:
Baseline
Baseline是一种基线对齐方式,你可以把它想象成英文书写的本子的线,它可以把不想关的几个组件设置在同一个水平线上进行对齐,下面我们简单的来使用:
body: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ new Baseline( baseline: 100.0, baselineType: TextBaseline.alphabetic, child: new Text("LiYuanJing",style: TextStyle(fontSize: 18.0,textBaseline: TextBaseline.alphabetic),), ), new Baseline( baseline: 100.0, baselineType: TextBaseline.alphabetic, child: new Text("HeFan",style: TextStyle(fontSize: 30.0,textBaseline: TextBaseline.alphabetic),), ), new Baseline( baseline: 100.0, baselineType: TextBaseline.alphabetic, child: FlutterLogo(size: 100,), ), ], ),
上面代码就一行组件,一行里面有二个文本,一个FlutterLogo,它们都在一条水平线上,实现的效果如下图所示:
IntrinsicWidth和IntrinsicHeight
IntrinsicWidth和IntrinsicHeight两个组件是Flutter官方不推荐使用的组件。他们存在一些性能上的问题,因为使用不到这里就做过多的讲解。而且能用这两种组件实现的效果,都可以用其他组件替代,所以忘了它,但不要不认识它,所以博主在博文最后提及一下。