Flutter基礎(chǔ)篇(6)-- 水平和垂直布局詳解

先來(lái)看看本文的目錄勤众,如下圖所示:

本文目錄

在原生Android開發(fā)中屹电,我們經(jīng)常會(huì)用LinearLayout來(lái)達(dá)到水平或垂直方向的布局懂傀,在Flutter中有兩個(gè)常用的組件也能夠做到類似的效果兄裂,分別是Row和Column組件脑慧,Row組件主要功能是處理水平方向的布局枣察,Column組件主要功能是處理垂直方向的布局争占。下文會(huì)具體講解在Flutter中如何使用Row和Column組件實(shí)現(xiàn)LinearLayout效果,以及兩者之間的對(duì)比序目,方便大家對(duì)比學(xué)習(xí)臂痕。

LinearLayout 里面的android:orientation="horizontal”屬性相當(dāng)于Row組件,LinearLayout 里面的 android:orientation="vertical”屬性相當(dāng)于Column組件猿涨。

Flutter和LinearLayout的對(duì)比圖示如下:

安卓的orientation屬性在Flutter中的體現(xiàn)

Row的使用示例代碼如下所示:

Row的使用示例代碼

Column的使用示例代碼如下所示:

Column的使用示例代碼

Flutter中的Row以及Column使用效果圖如下所示:

Flutter中的Row以及Column使用效果圖

這里是Android里面的使用(由于Flutter效果和Android的是一樣的握童,后文的安卓效果圖就不再展示了)

Android里面的使用

LinearLayout 里面的android:layout_width="wrap_content"或者 android:layout_height="wrap_content"屬性相當(dāng)于Row/Column組件里面的MainAxisSize.min屬性。

LinearLayout 里面的android:layout_width="match_parent"或者android:layout_height="match_parent"屬性相當(dāng)于Row/Column組件里面的MainAxisSize.max屬性叛赚。Row/Column組件如果沒有設(shè)置mainAxisSize屬性澡绩,默認(rèn)為max屬性值。第二小節(jié)中的Row/Column組件我們并沒有設(shè)置mainAxisSize屬性俺附,但是我們可以看到它的效果是MainAxisSize.max 屬性的效果(Row自動(dòng)填充寬為屏幕的寬英古,Column自動(dòng)填充高為屏幕的高)。

Flutter和LinearLayout的對(duì)比圖示如下:

Flutter和LinearLayout的對(duì)比圖

Flutter使用圖解如下:

Flutter中使用 MainAxisSize.max 效果圖

Flutter中使用 MainAxisSize.min 效果圖

這個(gè)是最復(fù)雜的昙读,需要重點(diǎn)掌握召调。gravity屬性在Android里面是用于指定控件本身或子控件的對(duì)齊屬性。在Flutter中我們可以使用Row/Column組件的MainAxisAlignment以及CrossAxisAlignment實(shí)現(xiàn)控件的對(duì)齊效果蛮浑。

MainAxisAlignment是設(shè)置主軸方向的對(duì)齊方式唠叛。如果我們給Row組件設(shè)置MainAxisAlignment屬性,那么它的主軸為水平方向沮稚。如果我們給Column組件設(shè)置MainAxisAlignment屬性艺沼,那么它的主軸為垂直方向。

MainAxisAlignment有6個(gè)屬性值蕴掏,默認(rèn)值為start障般,分別是:

1调鲸、MainAxisAlignment.start,將子控件放在主軸的起始位置挽荡。2藐石、MainAxisAlignment.end,將子控件放在主軸末尾定拟。3于微、MainAxisAlignment.center,將子控件放在主軸中間位置青自。

下面這三個(gè)屬性需要特別關(guān)注一下:

// 將主軸方向上的空白區(qū)域等分株依,使得子控件之間的空白區(qū)域相等,// 兩端的子控件都靠近首尾延窜,沒有間隙恋腕。4、MainAxisAlignment.spaceBetween// 將主軸方向上的空白區(qū)域等分逆瑞,使得子控件之間的空白區(qū)域相等荠藤,// 兩端的子控件都靠近首尾,首尾子控件的空白區(qū)域?yàn)?/2呆万。5商源、MainAxisAlignment.spaceAround// 將主軸方向上的空白區(qū)域等分车份,使得子控件之間的空白區(qū)域相等谋减,包括首尾。6扫沼、MainAxisAlignment.spaceEvenly

CrossAxisAlignment是設(shè)置交叉軸方向的對(duì)齊方式出爹,比如當(dāng)前給Row組件設(shè)置CrossAxisAlignment屬性,那么它的交叉軸為垂直方向缎除。如果我們給Column組件設(shè)置CrossAxisAlignment屬性严就,那么它的交叉軸為水平方向。

CrossAxisAlignment有5個(gè)屬性值器罐,默認(rèn)值為center梢为,分別是:

CrossAxisAlignment.start, 子控件顯示在交叉軸的起始位置。CrossAxisAlignment.end, 子控件顯示在交叉軸的末尾位置轰坊。CrossAxisAlignment.center, 子控件顯示在交叉軸的中間位置铸董。CrossAxisAlignment.stretch, 子控件完全填充交叉軸方向的空間。CrossAxisAlignment.baseline, 讓子控件的baseline在交叉軸方向?qū)R肴沫。

具體的示例如下:

(1)Row的子組件對(duì)齊

下面這個(gè)是Row的子組件對(duì)齊的示例:

示例中設(shè)置的主軸的屬性值是:MainAxisAlignment.spaceEvenly粟害,交叉軸的屬性值是:CrossAxisAlignment.end

Row的子組件對(duì)齊示例代碼

使用圖示如下圖所示:

Row的子組件對(duì)齊效果圖

(2)Column的子組件對(duì)齊

下面這個(gè)是Column的子組件對(duì)齊的示例:

示例中設(shè)置的主軸的屬性值是:MainAxisAlignment.spaceEvenly,交叉軸的屬性值是:CrossAxisAlignment.end

Column的子組件對(duì)齊示例代碼

使用圖示如下圖所示:

Column的子組件對(duì)齊效果圖

在Android中l(wèi)ayout_weight是LinearLayout里面的屬性颤芬,它是用來(lái)給子設(shè)置權(quán)重的悲幅,表示給子按照設(shè)置的比例去分配空間套鹅。在Flutter中我們可以使用Expanded 包裹Row或Column組件,使用Expanded 組件里面的flex屬性去實(shí)現(xiàn)同樣的效果。

先來(lái)看看Row是會(huì)如何給子設(shè)置權(quán)重的汰具,示例代碼如下所示:

Row給子設(shè)置權(quán)重示例代碼

上例中我寫了一個(gè)Row卓鹿,里面有3個(gè)并排的Icon組件,權(quán)重分別是1郁副、2减牺、5,為了好區(qū)分存谎,我給每個(gè)Icon加了不同的背景顏色拔疚。為了代碼更優(yōu)雅,我封裝了一個(gè)buildIcon(IconData icon, {int flex = 1, Color color})函數(shù)既荚,IconData是必須傳入的參數(shù); 參數(shù)2是權(quán)重稚失,默認(rèn)值為1; 參數(shù)3是組件的背景顏色,參數(shù)2和參數(shù)3是可選參數(shù)恰聘,可以根據(jù)需要進(jìn)行傳入句各。

我們看看效果圖,如圖所示:

效果圖

同理晴叨,我們只需要把上例中的 new Row替換成new Column就可以實(shí)現(xiàn)垂直方向設(shè)置權(quán)重凿宾,如上圖右邊所示。

在Flutter中的Row或Column中關(guān)于direction有2個(gè)需要掌握的屬性兼蕊,分別是:textDirection 以及verticalDirection初厚。其中textDirection屬性在Row組件中起到很大作用,verticalDirection屬性在Column組件中起到很大作用孙技。

textDirection的屬性值為TextDirection.ltr产禾,表示所有的子控件都是從左到右順序排列,這是默認(rèn)值牵啦。如果為TextDirection.rtl表示從右邊開始向左邊倒序排列亚情。

verticalDirection的屬性值為VerticalDirection.down, 表示所有的子控件都是從上到下順序排列。如果為VerticalDirection.up從底部開始向上倒序排列哈雏。

先來(lái)看看Row中是如何使用的楞件,我們這里使用的textDirection屬性,是還是拿本章一開始的那個(gè)例子做修改裳瘪,核心代碼如下所示:

Row中使用textDirection屬性

再來(lái)看看Column是如何使用的土浸,可以看出只需要把textDirection屬性換成verticalDirection就可以了。是不是很簡(jiǎn)單盹愚?

Column中使用verticalDirection屬性

我們看一下效果圖栅迄,如圖所示:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市皆怕,隨后出現(xiàn)的幾起案子毅舆,更是在濱河造成了極大的恐慌西篓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憋活,死亡現(xiàn)場(chǎng)離奇詭異岂津,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)悦即,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門吮成,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人辜梳,你說我怎么就攤上這事粱甫。” “怎么了作瞄?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵茶宵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我宗挥,道長(zhǎng)乌庶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任契耿,我火速辦了婚禮瞒大,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搪桂。我一直安慰自己透敌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布锅棕。 她就那樣靜靜地躺著拙泽,像睡著了一般淌山。 火紅的嫁衣襯著肌膚如雪裸燎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天泼疑,我揣著相機(jī)與錄音德绿,去河邊找鬼。 笑死退渗,一個(gè)胖子當(dāng)著我的面吹牛移稳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播会油,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼个粱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了翻翩?” 一聲冷哼從身側(cè)響起都许,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稻薇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后胶征,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塞椎,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年睛低,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了案狠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钱雷,死狀恐怖骂铁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罩抗,我是刑警寧澤从铲,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站澄暮,受9級(jí)特大地震影響名段,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泣懊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一伸辟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馍刮,春花似錦信夫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至匈辱,卻和暖如春振湾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亡脸。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工押搪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浅碾。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓大州,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親垂谢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子厦画,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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