0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Openharmony中的Flex和Grid布局

OpenHarmony技術社區(qū) ? 來源:OpenHarmony技術社區(qū) ? 作者:韓祥 ? 2022-04-26 10:54 ? 次閱讀

Flex 布局

Flex 布局是很常用也是很方便的一種布局模式,此種布局方式已經(jīng)廣泛使用在前端、小程序開發(fā)之中。

如果之前已經(jīng)學習過 Flex 布局,那么在 Openharmony 中也是大同小異的。

用法如下:

容器的常用參數(shù)

  • direction:子組件在 Flex 容器上排列的方向,即主軸的方向。

  • wrap:Flex 容器是單行/列還是多行/列排列。

  • justifyContent:子組件在 Flex 容器主軸上的對齊格式。

  • alignItems:子組件在 Flex 容器交叉軸上的對齊格式。

  • alignContent:交叉軸中有額外的空間時,多行內容的對齊方式。僅在 wrap 為 Wrap 或 WrapReverse 下生效。

子組件常用屬性(不是所有屬性):flexGrow:Flex 容器的剩余空間分配給給此屬性所在的組件的比例。

簡單的使用:Flex 布局的屬性有很多,但是最常用的還是讓子組件垂直水平居中,兩條屬性即可保證子組件垂直水平居中:

Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center}){
Text('水平垂直居中顯示').fontSize(18)
}.width('100%').height('100%')

Flex 也可用于很多常見布局場景,如下圖效果:

078ba7be-c481-11ec-bce3-dac502259ad0.png

利用 direction 屬性和 flexGrow 配合即可輕松達到上面的布局效果,核心代碼段如下:

Flex({direction:FlexDirection.Column}){
Column(){
ForEach(this.ListData,(item)=>{
Text(item).fontSize(18).height(100).width('100%').margin({bottom:5}).backgroundColor('#575da8')
},item=>item)
}.flexGrow(1).backgroundColor('#08ec89').margin({bottom:2}).padding(10)
Flex({alignItems:ItemAlign.Center}){
ForEach(this.navData,(item)=>{
Text(item).fontSize(18).height('100%').flexGrow(1).textAlign(TextAlign.Center).backgroundColor("#18ec08").margin(1)
},item=>item)
}.height(64)
}.width('100%').height('100%')

Flex 還有一個常用的屬性是 wrap,可以去配置換行,不過如果是多行建議還是使用 Grid 布局,更加靈活,下面看看 Grid 布局。

Grid 布局

Grid 做前端的同學應該都很熟悉了,翻譯成中文為“柵格” , 它將頁面劃分成一個個網(wǎng)格,可以任意組合不同的網(wǎng)格,做出各種各樣的布局。

用法如下:

基本概念:網(wǎng)格布局的區(qū)域,稱為“容器”,容器內部采用網(wǎng)格定位的子元素,稱為"項目"。

項目必須使用 Grid 子組件 GridItem 子組件包裹,即 Grid 的子組件必須是 GridItem。

容器屬性:

  • columnsTemplate
  • rowsTemplate

這兩個屬性用于設置當前網(wǎng)格布局的行和列的數(shù)量,不設置時默認 1 列行或者 1 列。

可以采用 fr 關鍵字表示各行和列的比例關系, 以列為例:‘1fr 1fr 2fr’ 將父組件等分為 4 等份,第一列第二列各占 1 份,第三列占兩份:

07963cd8-c481-11ec-bce3-dac502259ad0.png

核心代碼如下:

@StateNumber:String[]=['0','1','2']
build(){
Grid(){
ForEach(this.Number,(item:string)=>{
ForEach(this.Number,(item:string)=>{
GridItem(){
Text(item)
.fontSize(16)
.backgroundColor(Color.Grey)
.width('100%')
.height('100%')
.textAlign(TextAlign.Center)
}.borderWidth(1)
},item=>item)
},item=>item)
}
.columnsTemplate('1fr1fr2fr')
.rowsTemplate('1fr1fr2fr')
.backgroundColor(Color.Black)
.height(300)
}

這兩個屬性里面也可使用 px 單位,如將 columnsTemplate 修改:

.columnsTemplate('100px1fr1fr')

展示效果如下:

07aa671c-c481-11ec-bce3-dac502259ad0.pngcolumnsGap 和 rowsGap:這兩個屬性可以設置行列之間的間距,此處不在贅述。

layoutDirection:LayoutDirection.Row 和 LayoutDirection.Column,不過嘗試過后兩種值的結果都是按列排布,默認不給屬性的話是按行排布,這里應是沒有完全支持。

其他屬性:看到文檔還提供了很多屬性,但目前嘗試過后沒有效果,未支持。

事件:

onScrollIndex(first:number)=>void

當前列表顯示的起始位置發(fā)生變化會觸發(fā)這個事件,若要展示效果,則需使布局出現(xiàn)滾動條,可以去掉 rowsTemplate 屬性,然后在子組件內部設置高度,然后再添加事件監(jiān)聽:

Grid(){
ForEach(this.Number,(item:string)=>{
ForEach(this.Number,(item:string)=>{
GridItem(){
Text(item)
.fontSize(16)
.backgroundColor(Color.Grey)
.width('100%')
.height(80)
.textAlign(TextAlign.Center)
}
},item=>item)
},item=>item)
}
.columnsTemplate('1fr1fr1fr1fr1fr')
.columnsGap(10)
.rowsGap(10)
.onScrollIndex((first:number)=>{
console.log(first.toString())
})
.backgroundColor(Color.Black)
.height(300)

總結

Grid 布局與 Flex 有一定的相似性,都可以指定容器內部多個項目的位置。但是,它們也存在重大區(qū)別。

Flex 布局是軸線布局,只能指定"項目"針對軸線的位置,可以看作是一維布局。

Grid 布局則是將容器劃分成"行"和"列",產(chǎn)生單元格,然后指定"項目所在"的單元格,可以看作是二維布局。

其實掌握這兩種布局方式,頁面上面大部分效果都是可以做出來的。當然,當前 Gird 布局還有很多屬性是不支持的,相比較與傳統(tǒng)的前端 Grid 布局功能上有很多不足,期待 API 更新,完善功能。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Grid
    +關注

    關注

    0

    文章

    8

    瀏覽量

    9611
  • OpenHarmony
    +關注

    關注

    25

    文章

    3732

    瀏覽量

    16441

原文標題:Openharmony中的Flex和Grid布局

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區(qū)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    第三屆OpenHarmony技術大會星光璀璨、致謝OpenHarmony社區(qū)貢獻者

    10月12日,在上海舉辦的第三屆OpenHarmony技術大會上,32家高校OpenHarmony技術俱樂部璀璨亮相,30家高校OpenHarmony開發(fā)者協(xié)會盛大啟幕。還分別致謝了年度星光TSG
    的頭像 發(fā)表于 10-21 14:10 ?240次閱讀

    鴻蒙跨端實踐-布局方案介紹

    作者:京東科技 劉寧 一、前言 動態(tài)化使用 jue 語言(開發(fā)風格與 Vue 一致)開發(fā),對于視圖的布局采用了標準的Flex 布局方式。對于列表類視圖,動態(tài)化提供了、、、等標簽,將子視圖的布局
    的頭像 發(fā)表于 09-18 10:26 ?950次閱讀
    鴻蒙跨端實踐-<b class='flag-5'>布局</b>方案介紹

    基于ArkTS語言的OpenHarmony APP應用開發(fā):HelloOpenharmony

    1、程序簡介該程序是基于OpenHarmony標準系統(tǒng)編寫的UI應用類:HelloOpenHarmony。本案例是基于API9接口開發(fā)。本案例已在OpenHarmony凌蒙派-RK3568開發(fā)
    的頭像 發(fā)表于 09-15 08:09 ?448次閱讀
    基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用開發(fā):Hello<b class='flag-5'>Openharmony</b>

    pcb設計布局的要點是什么

    在PCB設計,布局是一個非常重要的環(huán)節(jié),它直接影響到電路的性能、可靠性和成本。以下是關于PCB布局的一些要點,這些要點將幫助您設計出高質量的PCB。 確定設計目標和要求 在開始布局
    的頭像 發(fā)表于 09-02 14:48 ?462次閱讀

    OpenHarmony項目群技術指導委員會2024年務虛研討會圓滿落幕

    7月19日至20日,OpenHarmony項目群技術指導委員會(后文簡稱“OpenHarmony TSC”)2024年務虛研討會于中國廈門順利召開。 本次會議由OpenHarmony
    的頭像 發(fā)表于 07-23 10:42 ?546次閱讀
    <b class='flag-5'>OpenHarmony</b>項目群技術指導委員會2024年<b class='flag-5'>中</b>務虛研討會圓滿落幕

    鴻蒙ArkTS容器組件:Grid

    網(wǎng)格容器,由“行”和“列”分割的單元格所組成,通過指定“項目”所在的單元格做出各種各樣的布局。
    的頭像 發(fā)表于 07-09 11:55 ?996次閱讀
    鴻蒙ArkTS容器組件:<b class='flag-5'>Grid</b>

    鴻蒙ArkTS聲明式開發(fā):跨平臺支持列表【Flex布局】 通用屬性

    從API Version 7開始支持。后續(xù)版本如有新增內容,則采用上角標單獨標記該內容的起始版本。 > - 僅當父組件是 Flex、Column、Row 、GridRow時生效。
    的頭像 發(fā)表于 05-30 14:38 ?644次閱讀
    鴻蒙ArkTS聲明式開發(fā):跨平臺支持列表【<b class='flag-5'>Flex</b><b class='flag-5'>布局</b>】 通用屬性

    鴻蒙ArkUI開發(fā):常用布局【創(chuàng)建網(wǎng)格(Grid/GridItem)】

    網(wǎng)格布局主要用于處理固定行列的UI,也支持動態(tài)調整。很類似iOS的UICollectionView。
    的頭像 發(fā)表于 05-15 16:24 ?820次閱讀
    鴻蒙ArkUI開發(fā):常用<b class='flag-5'>布局</b>【創(chuàng)建網(wǎng)格(<b class='flag-5'>Grid</b>/GridItem)】

    HarmonyOS實戰(zhàn)開發(fā)-Flex布局性能提升使用指導

    Flex為采用彈性布局的容器。容器內部的所有子元素,會自動參與彈性布局。子元素默認沿主軸排列,子元素在主軸方向的尺寸稱為主軸尺寸。 在單行布局場景下,容器里子組件的主軸尺寸長度總和可能
    發(fā)表于 05-10 14:26

    HarmonyOS NEXT應用開發(fā)性能優(yōu)化入門引導

    、List、Grid、RelativeContainer、絕對布局和自定義布局等構建復雜布局 復雜布局提供了場景化的能力(詳細介紹可參考文章
    發(fā)表于 05-09 14:49

    HarmonyOS開發(fā)ArkUI案例:【常用布局容器對齊方式】

    基于ArkTS擴展的聲明式開發(fā)范式,實現(xiàn)Flex、Column、Row和Stack四種常用布局容器對齊方式。
    的頭像 發(fā)表于 05-08 16:47 ?1675次閱讀
    HarmonyOS開發(fā)ArkUI案例:【常用<b class='flag-5'>布局</b>容器對齊方式】

    OpenHarmony南向能力征集令

    1、適配過程缺少哪些接口能力或者南向能力,需要OpenHarmony去補齊的?例如內核、編譯、器件適配、單板適配等; 2、對標linux,需要OpenHarmony提供哪些能力?比如V4L2
    發(fā)表于 04-09 15:32

    OpenHarmonySELinux使用詳解

    OpenHarmonySELinux使用詳解 目錄 1.SELinux簡介 2.SELinux概念 3.SELinux模式 4.OHSELinux使用詳解 5.OHSELinux
    發(fā)表于 04-03 10:43

    OpenHarmony內核編程實戰(zhàn)

    編寫程序,讓開發(fā)板在串口調試工具輸出”Hello,OpenHarmony“。▍操作在源碼的根目錄中有名為”applications“的文件,他存放著應用程序樣例
    的頭像 發(fā)表于 03-27 08:31 ?902次閱讀
    <b class='flag-5'>OpenHarmony</b>內核編程實戰(zhàn)

    淺談兼容 OpenHarmony 的 Flutter

    OpenHarmony SIG 組織在 Gitee 開源了兼容 OpenHarmony 的 Flutter。該組織主要用于孵化 OpenHarmony 相關的開源生態(tài)項目。 ? ? ▲ 倉庫地址
    的頭像 發(fā)表于 02-02 15:22 ?644次閱讀
    淺談兼容 <b class='flag-5'>OpenHarmony</b> 的 Flutter