Flutter基礎(chǔ)布局之Row/Column/Stack

移動(dòng)開發(fā)中常常會(huì)對(duì)各個(gè)Widget進(jìn)行布局车荔,本文主要介紹了Flutter中最基本的三種布局方式:Row渡冻、Column、Stack忧便。從字面意思族吻,我們也可以理解到,Row對(duì)應(yīng)Android中的LinearLayout珠增,orientation為Horizontal呼奢。Column對(duì)應(yīng)于Android中的LinearLayout,orientation為Vertical切平。Stack對(duì)應(yīng)于Android中的RelativeLayout握础,可以通過添加相應(yīng)子控件,設(shè)置目標(biāo)控件在父控件的布局規(guī)則悴品。下面我們通過幾個(gè)簡(jiǎn)單的例子介紹這三種布局控件的基本用法禀综。

一.Row/Column

Row和Column分別為水平布局和垂直布局,這兩個(gè)布局控件具有相同的屬性值苔严,只是其子控件的方向不同定枷。這里我們重點(diǎn)了解下mainAxisAlignment和crossAxisAlignment兩個(gè)屬性,也就是主軸和交叉軸的概念届氢。

Row.png
Column.png

對(duì)于Row來說,水平方向就是主軸,垂直方向就是橫軸欠窒,對(duì)于Column來說,垂直方向就是主軸,水平方向就是橫軸。

其中MainAxisAlignment枚舉值:

  • center:將children放置在主軸的中心退子;
  • end:將children放置在主軸的末尾岖妄;
  • spaceAround:將主軸方向上的空白區(qū)域均分,使得children之間的空白區(qū)域相等寂祥,但是首尾child的空白區(qū)域?yàn)?/2荐虐;
  • spaceBetween:將主軸方向上的空白區(qū)域均分,使得children之間的空白區(qū)域相等丸凭,首尾child都靠近首尾福扬,沒有間隙硝逢;
  • spaceEvenly:將主軸方向上的空白區(qū)域均分喳坠,使得children之間的空白區(qū)域相等,包括首尾child;
    start:將children放置在主軸的起點(diǎn)排宰;

CrossAxisAlignment枚舉值有如下幾種:

  • baseline:在交叉軸方向摄乒,使得children的baseline對(duì)齊瑰煎;
  • center:children在交叉軸上居中展示抢呆;
  • end:children在交叉軸上末尾展示;
  • start:children在交叉軸上起點(diǎn)處展示刹缝;
  • stretch:讓children填滿交叉軸方向碗暗;

示例代碼:

Row(
  crossAxisAlignment: CrossAxisAlignment.center,
  mainAxisAlignment: MainAxisAlignment.spaceBetween,
  children: <Widget>[
    Text('Hello', style: TextStyle(fontSize: 48),),
    Text('world', style: TextStyle(fontSize: 24),)
  ],
),
Row(
  crossAxisAlignment: CrossAxisAlignment.start,
  mainAxisAlignment: MainAxisAlignment.spaceAround,
  children: <Widget>[
    Text('Hello', style: TextStyle(fontSize: 48),),
    Text('world', style: TextStyle(fontSize: 24),)
  ],
),
Row(
  crossAxisAlignment: CrossAxisAlignment.end,
  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  children: <Widget>[
    Text('Hello', style: TextStyle(fontSize: 48),),
    Text('world', style: TextStyle(fontSize: 24),)
  ],
),

顯示效果:


效果.png

值得注意的是,Row和Column自身不帶滾動(dòng)屬性梢夯,如果超出了一行言疗,在debug下面則會(huì)顯示溢出的提示。當(dāng)子空間超出頁面時(shí)颂砸,如添加了ListView控件噪奄,可在外面包裹一層Expanded控件。
當(dāng)需要對(duì)子空間進(jìn)行等分布局時(shí)人乓,可使用Flex

示例:

child: Column(
  children: <Widget>[
    Expanded(
      flex: 1,
      child: Container(color: Colors.red),
    ),
    Expanded(
      flex: 2,
      child: Container(color: Colors.green),
    ),
    Expanded(
      flex: 1,
      child: Container(color: Colors.blue),
    ),
  ],
)

效果:


Flex效果.png

二.Stack

在Stack中可通過兩種方式來定位子控件的位置勤篮,分別為使用Positioned包裹子控件及使用Align包裹子控件。我們先來看一段示例代碼:

Container(
  padding: EdgeInsets.all(16),
  color: Colors.grey,
  height: 200,
  child:
  Stack(
    children: <Widget>[
      Positioned(
        top: 2,
        left: 10,
        child: Text('top_2_left_10'),
      ),
      Positioned(
        top: 2,
        right: 10,
        child: Text('top_2_right_10'),
      ),
      Positioned(
        bottom: 2,
        right: 10,
        child: Text('bottom_2_right_10'),
      ),
      Positioned(
        bottom: 2,
        left: 10,
        child: Text('bottom_2_left_10'),
      ),
      Align(
        alignment: Alignment.centerLeft,
        child:Text('Left', style: TextStyle(fontSize: 15))
      ),
      Align(
        alignment: Alignment.center,
        child:Text('Center', style: TextStyle(fontSize: 15))
      ),
      Align(
        alignment: Alignment.centerRight,
        child:Text('Right', textAlign: TextAlign.right, style: TextStyle(fontSize: 15))
      )
    ],
  ),
),

顯示效果如下圖:


Stack效果.png

其中色罚,Postioned可設(shè)置子控件在父控件中的對(duì)齊方式:左對(duì)齊碰缔,右對(duì)齊,頂部對(duì)齊戳护,底部對(duì)齊金抡。并通過設(shè)置具體數(shù)值設(shè)置上下左右距離各邊的距離。

Align控件可通過設(shè)置其屬性值alignment腌且,定位子控件在父控件中的位置梗肝。對(duì)齊子控件的方式有:

  • bottomCenter 底部中心
  • bottomLeft 左下角
  • bottomRight 右下角
  • center 水平垂直居中
  • centerLeft 左邊緣中心
  • centerRight 右邊緣中心
  • topCenter 頂部中心
  • topLeft 左上角
  • topRight 右上角

三.總結(jié)

本文主要介紹了Flutter中的三種最基本的布局方式,我們可以通過靈活運(yùn)用各種布局方式及其輔助控件實(shí)現(xiàn)我們想要的效果铺董。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巫击,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子精续,更是在濱河造成了極大的恐慌坝锰,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驻右,死亡現(xiàn)場(chǎng)離奇詭異什黑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堪夭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人森爽,你說我怎么就攤上這事恨豁。” “怎么了爬迟?”我有些...
    開封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵橘蜜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我付呕,道長(zhǎng)计福,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任徽职,我火速辦了婚禮象颖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姆钉。我一直安慰自己说订,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開白布潮瓶。 她就那樣靜靜地躺著陶冷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毯辅。 梳的紋絲不亂的頭發(fā)上埂伦,一...
    開封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音思恐,去河邊找鬼赤屋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛壁袄,可吹牛的內(nèi)容都是我干的类早。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼嗜逻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼涩僻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起栈顷,我...
    開封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤逆日,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后萄凤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體室抽,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年靡努,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了坪圾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晓折。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兽泄,靈堂內(nèi)的尸體忽然破棺而出漓概,到底是詐尸還是另有隱情,我是刑警寧澤病梢,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布胃珍,位于F島的核電站,受9級(jí)特大地震影響蜓陌,放射性物質(zhì)發(fā)生泄漏觅彰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一钮热、第九天 我趴在偏房一處隱蔽的房頂上張望填抬。 院中可真熱鬧,春花似錦霉旗、人聲如沸痴奏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽读拆。三九已至,卻和暖如春鸵闪,著一層夾襖步出監(jiān)牢的瞬間檐晕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工蚌讼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辟灰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓篡石,卻偏偏與公主長(zhǎng)得像芥喇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凰萨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 聽了這話继控,我有點(diǎn)擔(dān)心了,我覺得自己已經(jīng)在騎驢找不到馬的怪圈里胖眷,這回恐怕又要黃了武通。 老人見我的神情有些緊張,便緩和一...
    大丸子取鬧閱讀 168評(píng)論 0 0
  • 自我增值的方法: 1珊搀、每天讀書冶忱; 2、學(xué)習(xí)新的語言境析; 3囚枪、戰(zhàn)勝你的恐懼派诬; 4、升級(jí)你的技能眶拉; 5千埃、承認(rèn)自己的缺點(diǎn)憔儿;...
    且讓我_安之若素閱讀 390評(píng)論 0 0
  • 今天是什么日子 起床:5:30 就寢:未知 天氣:晴朗 心情:美美噠 紀(jì)念日:無 叫我起床的不是鬧鐘是夢(mèng)想 年度目...
    莫晗閱讀 203評(píng)論 0 0
  • 月飲清風(fēng)我飲酒忆植,花有嫵媚我風(fēng)流。 醉眼人間滿腹詩(shī)谒臼,雖居蓬蒿亦無憂朝刊。
    簡(jiǎn)村小吹閱讀 956評(píng)論 16 28