Flutter 之線性布局(Row,Column)

所謂線性布局呻征,即指沿水平所謂線性布局,即指沿水平或垂直方向排布子組件梯嗽。Flutter中通過(guò)Row和Column來(lái)實(shí)現(xiàn)線性布局匕得,類(lèi)似于Android中的LinearLayout控件。Row和Column都繼承自Flex栈虚,我將在彈性布局一節(jié)中詳細(xì)介紹Flex袖外。

主軸和縱軸

對(duì)于線性布局,有主軸和縱軸之分魂务,如果布局是沿水平方向曼验,那么主軸就是指水平方向,而縱軸即垂直方向粘姜;如果布局沿垂直方向鬓照,那么主軸就是指垂直方向,而縱軸就是水平方向孤紧。在線性布局中豺裆,有兩個(gè)定義對(duì)齊方式的枚舉類(lèi)MainAxisAlignment和CrossAxisAlignment,分別代表主軸對(duì)齊和縱軸對(duì)齊。

1:Row

Row可以在水平方向排列其子widget臭猜。定義如下:

   Row({
   ...  
TextDirection textDirection,    
MainAxisSize mainAxisSize = MainAxisSize.max,    
MainAxisAlignment mainAxisAlignment = 
MainAxisAlignment.start,
VerticalDirection verticalDirection = VerticalDirection.down,  
CrossAxisAlignment crossAxisAlignment   =    CrossAxisAlignment.center,
 List<Widget> children = const <Widget>[],
    })
  • textDirection:表示水平方向子組件的布局順序(是從左往右還是從右往左)躺酒,默認(rèn)為系統(tǒng)當(dāng)前Locale環(huán)境的文本方向(如中文、英語(yǔ)都是從左往右蔑歌,而阿拉伯語(yǔ)是從右往左)羹应。
  • mainAxisSize:表示Row在主軸(水平)方向占用的空間,默認(rèn)是>->- MainAxisSize.max次屠,表示盡可能多的占用水平方向的空間园匹,此時(shí)無(wú)論子widgets實(shí)際占用多少水平空間,Row的寬度始終等于水平方向的最大寬度劫灶;而MainAxisSize.min表示盡可能少的占用水平空間偎肃,當(dāng)子組件沒(méi)有占滿水平剩余空間,則Row的實(shí)際寬度等于所有子組件占用的的水平空間浑此;
  • mainAxisAlignment:表示子組件在Row所占用的水平空間內(nèi)對(duì)齊方式累颂,如果mainAxisSize值為MainAxisSize.min,則此屬性無(wú)意義凛俱,因?yàn)樽咏M件的寬度等于Row的寬度紊馏。只有當(dāng)mainAxisSize的值為MainAxisSize.max時(shí),此屬性才有意義蒲犬,MainAxisAlignment.start表示沿textDirection的初始方向?qū)R朱监,如textDirection取值為T(mén)extDirection.ltr時(shí),則MainAxisAlignment.start表示左對(duì)齊原叮,textDirection取值為T(mén)extDirection.rtl時(shí)表示從右對(duì)齊赫编。而MainAxisAlignment.end和MainAxisAlignment.start正好相反;MainAxisAlignment.center表示居中對(duì)齊奋隶。讀者可以這么理解:textDirection是mainAxisAlignment的參考系擂送。
  • verticalDirection:表示Row縱軸(垂直)的對(duì)齊方向,默認(rèn)是VerticalDirection.down唯欣,表示從上到下嘹吨。
  • crossAxisAlignment:表示子組件在縱軸方向的對(duì)齊方式,Row的高度等于子組件中最高的子元素高度境氢,它的取值和MainAxisAlignment一樣(包含start蟀拷、end、 center三個(gè)值)萍聊,不同的是crossAxisAlignment的參考系是verticalDirection问芬,即verticalDirection值為VerticalDirection.down時(shí)crossAxisAlignment.start指頂部對(duì)齊,verticalDirection值為VerticalDirection.up時(shí)寿桨,crossAxisAlignment.start指底部對(duì)齊此衅;而crossAxisAlignment.end和crossAxisAlignment.start正好相反;

-children :子組件數(shù)組。

2:Column

Column可以在垂直方向排列其子組件炕柔。參數(shù)和Row一樣,不同的是布局方向?yàn)榇怪泵接叮鬏S縱軸正好相反匕累,讀者可類(lèi)比Row來(lái)理解

  • 由于我們沒(méi)有指定Column的mainAxisSize,所以使用默認(rèn)值MainAxisSize.max默伍,則Column會(huì)在垂直方向占用盡可能多的空間欢嘿,此例中為屏幕高度。
  • 由于我們指定了 crossAxisAlignment 屬性為CrossAxisAlignment.center也糊,那么子項(xiàng)在Column縱軸方向(此時(shí)為水平方向)會(huì)居中對(duì)齊炼蹦。注意,在水平方向?qū)R是有邊界的狸剃,總寬度為Column占用空間的實(shí)際寬度掐隐,而實(shí)際的寬度取決于子項(xiàng)中寬度最大的Widget。在本例中钞馁,Column有兩個(gè)子Widget虑省,而顯示“world”的Text寬度最大,所以Column的實(shí)際寬度則為T(mén)ext("world") 的寬度僧凰,所以居中對(duì)齊后Text("hi")會(huì)顯示在Text("world")的中間部分探颈。

實(shí)際上,Row和Column都只會(huì)在主軸方向占用盡可能大的空間训措,而縱軸的長(zhǎng)度則取決于他們最大子元素的長(zhǎng)度伪节。

3:特殊情況

如果Row里面嵌套R(shí)ow,或者Column里面再嵌套Column绩鸣,那么只有對(duì)最外面的Row或Column會(huì)占用盡可能大的空間怀大,里面Row或Column所占用的空間為實(shí)際大小 下面以Column為例說(shuō)明:

Container(
color: Colors.green,
  child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
  crossAxisAlignment: CrossAxisAlignment.start,
  mainAxisSize: MainAxisSize.max, //有效,外層Colum高度為整個(gè)屏幕
  children: <Widget>[
    Container(
      color: Colors.red,
      child: Column(
        mainAxisSize: MainAxisSize.max,//無(wú)效呀闻,內(nèi)層Colum高度為實(shí)際高度  
        children: <Widget>[
          Text("hello world "),
          Text("I am Jack "),
        ],
      ),
    )
  ],
),
),
);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叉寂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子总珠,更是在濱河造成了極大的恐慌屏鳍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件局服,死亡現(xiàn)場(chǎng)離奇詭異钓瞭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)淫奔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)山涡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事鸭丛【呵睿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鳞溉,是天一觀的道長(zhǎng)瘾带。 經(jīng)常有香客問(wèn)我,道長(zhǎng)熟菲,這世上最難降的妖魔是什么看政? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮抄罕,結(jié)果婚禮上允蚣,老公的妹妹穿的比我還像新娘。我一直安慰自己呆贿,他們只是感情好嚷兔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著做入,像睡著了一般谴垫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上母蛛,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天翩剪,我揣著相機(jī)與錄音,去河邊找鬼彩郊。 笑死前弯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秫逝。 我是一名探鬼主播恕出,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼违帆!你這毒婦竟也來(lái)了浙巫?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刷后,失蹤者是張志新(化名)和其女友劉穎的畴,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體尝胆,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丧裁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了含衔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煎娇。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡二庵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缓呛,到底是詐尸還是另有隱情催享,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布哟绊,位于F島的核電站因妙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匿情。R本人自食惡果不足惜兰迫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一信殊、第九天 我趴在偏房一處隱蔽的房頂上張望炬称。 院中可真熱鬧,春花似錦涡拘、人聲如沸玲躯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)跷车。三九已至,卻和暖如春橱野,著一層夾襖步出監(jiān)牢的瞬間朽缴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工水援, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留密强,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓蜗元,卻偏偏與公主長(zhǎng)得像或渤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奕扣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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