鴻蒙HarmonyOS應(yīng)用開發(fā)-Column&Row組件

1 概述

一個豐富的頁面需要很多組件組成属愤,那么船万,我們?nèi)绾尾拍茏屵@些組件有條不紊地在頁面上布局呢?這就需要借助容器組件來實現(xiàn)舶衬。

容器組件是一種比較特殊的組件,它可以包含其他的組件赎离,而且按照一定的規(guī)律布局逛犹,幫助開發(fā)者生成精美的頁面。容器組件除了放置基礎(chǔ)組件外梁剔,也可以放置容器組件虽画,通過多層布局的嵌套,可以布局出更豐富的頁面憾朴。

ArkTS為我們提供了豐富的容器組件來布局頁面狸捕,本文將以構(gòu)建登錄頁面為例,介紹Column和Row組件的屬性與使用众雷。

2 組件介紹

布局容器概念

線性布局容器表示按照垂直方向或者水平方向排列子組件的容器,ArkTS提供了Column和Row容器來實現(xiàn)線性布局做祝。

  • Column表示沿垂直方向布局的容器砾省。

  • Row表示沿水平方向布局的容器。

主軸和交叉軸概念

在布局容器中混槐,默認(rèn)存在兩根軸编兄,分別是主軸和交叉軸,這兩個軸始終是相互垂直的声登。不同的容器中主軸的方向不一樣的狠鸳。

  • 主軸:在Column容器中的子組件是按照從上到下的垂直方向布局的,其主軸的方向是垂直方向悯嗓;在Row容器中的組件是按照從左到右的水平方向布局的件舵,其主軸的方向是水平方向。

圖1 Column容器&Row容器主軸

  • 交叉軸:與主軸垂直相交的軸線脯厨,如果主軸是垂直方向铅祸,則交叉軸就是水平方向;如果主軸是水平方向,則交叉軸是垂直方向临梗。

圖2 Column容器&Row容器交叉軸

屬性介紹

了解布局容器的主軸和交叉軸涡扼,主要是為了讓大家更好地理解子組件在主軸和交叉軸的排列方式。

接下來盟庞,我們將詳細(xì)講解Column和Row容器的兩個屬性justifyContent和alignItems吃沪。

1. 主軸方向的對齊(justifyContent)

子組件在主軸方向上的對齊使用justifyContent屬性來設(shè)置,其參數(shù)類型是FlexAlign什猖。FlexAlign定義了以下幾種類型:

  • Start:元素在主軸方向首端對齊票彪,第一個元素與行首對齊,同時后續(xù)的元素與前一個對齊卸伞。
  • Center:元素在主軸方向中心對齊抹镊,第一個元素與行首的距離以及最后一個元素與行尾距離相同。
  • End:元素在主軸方向尾部對齊荤傲,最后一個元素與行尾對齊垮耳,其他元素與后一個對齊。
  • SpaceBetween:元素在主軸方向均勻分配彈性元素遂黍,相鄰元素之間距離相同终佛。 第一個元素與行首對齊,最后一個元素與行尾對齊雾家。
  • SpaceAround:元素在主軸方向均勻分配彈性元素铃彰,相鄰元素之間距離相同。 第一個元素到行首的距離和最后一個元素到行尾的距離是相鄰元素之間距離的一半芯咧。
  • SpaceEvenly:元素在主軸方向等間距布局牙捉,無論是相鄰元素還是邊界元素到容器的間距都一樣。

2. 交叉軸方向的對齊(alignItems)

子組件在交叉軸方向上的對齊方式使用alignItems屬性來設(shè)置敬飒。

Column容器的主軸是垂直方向邪铲,交叉軸是水平方向,其參數(shù)類型為HorizontalAlign(水平對齊)无拗,HorizontalAlign定義了以下幾種類型:

  • Start:設(shè)置子組件在水平方向上按照起始端對齊带到。
  • Center(默認(rèn)值):設(shè)置子組件在水平方向上居中對齊。
  • End:設(shè)置子組件在水平方向上按照末端對齊英染。

Row容器的主軸是水平方向揽惹,交叉軸是垂直方向,其參數(shù)類型為VerticalAlign(垂直對齊)四康,VerticalAlign定義了以下幾種類型:

  • Top:設(shè)置子組件在垂直方向上居頂部對齊搪搏。
  • Center(默認(rèn)值):設(shè)置子組件在豎直方向上居中對齊。
  • Bottom:設(shè)置子組件在豎直方向上居底部對齊箭养。

接口介紹

接下來慕嚷,我們介紹Column和Row容器的接口。

Column和Row容器的接口都有一個可選參數(shù)space,表示子組件在主軸方向上的間距喝检。

效果如下:

3 組件使用

我們來具體講解如何高效的使用Column和Row容器組件來構(gòu)建這個登錄頁面嗅辣。

當(dāng)我們從設(shè)計同學(xué)那拿到一個頁面設(shè)計圖時,我們需要對頁面進(jìn)行拆解挠说,先確定頁面的布局澡谭,再分析頁面上的內(nèi)容分別使用哪些組件來實現(xiàn)。

我們仔細(xì)分析這個登錄頁面损俭。在靜態(tài)布局中蛙奖,組件整體是從上到下布局的,因此構(gòu)建該頁面可以使用Column來構(gòu)建杆兵。在此基礎(chǔ)上雁仲,我們可以看到有部分內(nèi)容在水平方向上由幾個基礎(chǔ)組件構(gòu)成,例如頁面中間的短信驗證碼登錄與忘記密碼以及頁面最下方的其他方式登錄琐脏,那么構(gòu)建這些內(nèi)容的時候攒砖,可以在Column組件中嵌套Row組件,繼而在Row組件中實現(xiàn)水平方向的布局日裙。

根據(jù)上述頁面拆解吹艇,在Column容器里,依次是Image昂拂、Text受神、TextInput、Button等基礎(chǔ)組件格侯,還有兩組組件是使用Row容器組件來實現(xiàn)的鼻听,主要代碼如下:

@Entry
@Component
export struct LoginPage {
  build() {
    Column() {
      Image($r('app.media.logo'))
        ...
      Text($r('app.string.login_page'))
        ...
      Text($r('app.string.login_more'))
        ...
      TextInput({ placeholder: $r('app.string.account') })
        ...
      TextInput({ placeholder: $r('app.string.password') })
        ...
      Row() {
        Text($r(…)) 
        Text($r(…)) 
      }
      Button($r('app.string.login'), { type: ButtonType.Capsule, stateEffect: true })
        ...
      Row() {
        this.imageButton($r(…))
        this.imageButton($r(…))
        this.imageButton($r(…))
      }
      ...
    }
    ...
  }
}

我們詳細(xì)看一下使用Row容器的兩組組件。

兩個文本組件展示的內(nèi)容是按水平方向布局的联四,使用兩端對齊的方式精算。這里我們使用Row容器組件,并且需要配置主軸上(水平方向)的對齊格式j(luò)ustifyContent為FlexAlign.SpaceBetween(兩端對齊)碎连。

Row() {
  Text($r(…)) 
  Text($r(…)) 
  }
  .justifyContent(FlexAlign.SpaceBetween)
  .width('100%')

其他登錄方式的三個按鈕也是按水平方向布局的,同樣使用Row容器組件驮履。這里按鈕的間距是一致的鱼辙,我們可以通過配置可選參數(shù)space來設(shè)置按鈕間距,使子組件間距一致玫镐。

Row({ space: CommonConstants.LOGIN_METHODS_SPACE }) {
  this.imageButton($r(…))
  this.imageButton($r(…))
  this.imageButton($r(…))
}

至此倒戏,你已經(jīng)完成這個登錄頁面的簡單布局實現(xiàn)了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恐似,一起剝皮案震驚了整個濱河市杜跷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖葛闷,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件憋槐,死亡現(xiàn)場離奇詭異,居然都是意外死亡淑趾,警方通過查閱死者的電腦和手機阳仔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扣泊,“玉大人近范,你說我怎么就攤上這事⊙有罚” “怎么了评矩?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長阱飘。 經(jīng)常有香客問我斥杜,道長,這世上最難降的妖魔是什么俯萌? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任果录,我火速辦了婚禮,結(jié)果婚禮上咐熙,老公的妹妹穿的比我還像新娘弱恒。我一直安慰自己,他們只是感情好棋恼,可當(dāng)我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布返弹。 她就那樣靜靜地躺著,像睡著了一般爪飘。 火紅的嫁衣襯著肌膚如雪义起。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天师崎,我揣著相機與錄音默终,去河邊找鬼。 笑死犁罩,一個胖子當(dāng)著我的面吹牛齐蔽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播床估,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼含滴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丐巫?” 一聲冷哼從身側(cè)響起谈况,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤勺美,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碑韵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赡茸,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年泼诱,在試婚紗的時候發(fā)現(xiàn)自己被綠了坛掠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡治筒,死狀恐怖屉栓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情耸袜,我是刑警寧澤友多,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站堤框,受9級特大地震影響域滥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜈抓,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一启绰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沟使,春花似錦委可、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至燕少,卻和暖如春卡者,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背客们。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工崇决, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人底挫。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓嗽桩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親凄敢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,587評論 2 350

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