精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何使用GriRow和GriCol開發自適應布局

系統 OpenHarmony
OpenHarmony為開發者提供了較為靈活的自適應布局能力,本文即為大家做一個簡單的介紹。

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

場景說明

開發者經常需要將一個應用適配到不同的設備上運行,比如手機、平板、折疊屏等等。為了保證用戶的瀏覽體驗,就需要根據不同設備的屏幕尺寸設計相應的UI布局變化。常見的如閱讀軟件,在手機上顯示一頁內容,在折疊屏上就可以顯示兩頁內容,這樣才能給用戶更好的閱讀體驗。
針對上述場景,OpenHarmony為開發者提供了較為靈活的自適應布局能力,本文即為大家做一個簡單的介紹。

兩個重要的自適應布局組件

使用OpenHarmony進行自適應布局的開發離不開以下兩個組件:GridRow、GridCol。

  • GridRow用來將屏幕等分為特定列數,并設置區分屏幕大小的臨界點(breakpoints),比如可以將屏幕列數根據屏幕大小劃分為:小屏設備4列,中屏8列,大屏12列(假設屏幕寬度<=520vp為小屏,520vp<屏幕寬度<=840vp為中屏,屏幕寬度>840vp為大屏)。那么就可以將520vp和840vp設置為臨界點,當屏幕尺寸由[0,520vp]區間跨越到[520vp,840vp]區間時,屏幕劃分的列數也會由4列變為8列。臨界點的詳細介紹可參考GridRow指南
  • GridCol是Gridrow的子組件,可以根據屏幕大小設置其所覆蓋的列數,那么GridCol中的子組件就可以相應的隨屏幕的大小變化而變化。比如界面中有一個搜索框,我們希望其長度在小屏設備上占2列,中屏設備占4列,大屏設備占8列,那么就可以將搜索框放在一個GridCol組件中,并設置GridCol組件在小、中、大設備上所占的列數分別為2、4、8。
    可參考如下GridRow和GridCol的示意圖理解兩者之間的關系:

一個小示例

接下來用一個小示例來展示GridRow和GridCol是怎么協同實現自適應布局的。

頁面元素

頁面中包含一個文本框,一個搜索框,一個滑動條。

實現效果

  • 小屏頁面時,文本框、搜索框和滾動條縱向排列,搜索框和滾動條跟屏幕等寬,滾動條一次顯示一個頁面。
  • 當拖動頁面至中屏大小時,文本框和搜索框在一行顯示,滾動條一次顯示兩個頁面。

效果圖如下:

開發步驟

接下來我們來看如何完成上述效果的開發。開發步驟中僅展示相關步驟代碼,全量代碼請參考完整代碼章節的內容。

首先,使用GridRow對屏幕進行劃分,本例按照不同屏幕大小進行如下劃分:最小屏4列、小屏4列、中屏8列。設置最小屏到小屏,小屏到中屏兩個斷點(最小屏到小屏的斷點本例效果沒有演示)。

GridRow({
  // 劃分屏幕:最小屏4列、小屏4列、中屏8列
  columns:{xs: 4, sm: 4, md: 8},
  gutter:{x:$r('app.float.gutter_home')},
  // 設置最小屏到小屏,小屏到中屏兩個斷點
  breakpoints: { value: ["320vp", "520vp"] }
}){
//...
}
.height("100%")
.width("100%")
.padding({top:10,bottom:10,left:10,right:10})

補充UI元素,將文本框、搜索框、滑動條放在GridCol中,GridCol為GridRow的子組件。

GridRow({
  // 劃分屏幕:最小屏4列、小屏4列、中屏8列
  columns:{xs: 4, sm: 4, md: 8},
  gutter:{x:$r('app.float.gutter_home')},
  // 設置最小屏到小屏,小屏到中屏兩個斷點
  breakpoints: { value: ["320vp", "520vp"] }
}){

  // 文本框:首頁
  GridCol(){
    Row() {
      Text("首頁")
       //...
    }
  }
  .height(56)
  .margin({ bottom: 8})

  // 搜索框
  GridCol(){
    Search({placeholder:'搜索...'})
      //...
  }
  .height(48)

  // 滾動條
  GridCol(){
    Swiper(){
      //...
    }
    .height(144)
    .itemSpace(12)
    .autoPlay(true)
    .displayCount(this.currentbp == 'md' ? 2 : 1)
  }
  .height(144)
}
.height('100%')
.width('100%')
.padding({top:10,bottom:10,left:10,right:10})

分別設置文本框、搜索框、滾動條所在GridCol在不同屏幕尺寸下所占的列數。

  • 由于小屏時文本框、搜索框和滾動條縱向排列,且搜索框和滾動條跟屏幕等寬,所以可以讓三個元素占滿屏幕劃分的列數,即4列。
  • 中屏大小時,文本框和搜索框在一行顯示,此時屏幕總共劃分為8列,所以可以讓文本框占2列,搜索框占6列(只要兩個元素占用的列數之和小于8都可以在一行顯示)。
  • 中屏大小時,滾動條一次顯示兩個頁面。滾動條占滿8列,然后通過displayCount屬性控制顯示的頁數。

代碼如下:

GridRow({
  // 劃分屏幕:最小屏4列、小屏4列、中屏8列
  columns:{xs: 4, sm: 4, md: 8},
  gutter:{x:$r('app.float.gutter_home')},
  // 設置最小屏到小屏,小屏到中屏兩個斷點
  breakpoints: { value: ["320vp", "520vp"] }
}){

  // 文本框:首頁
  // 小屏sm:4列,中屏md:2列
  GridCol({span:{ xs: 2, sm: 4, md: 2}}){
    Row() {
      Text("首頁")
       //...
    }
  }
  .height(56)
  .margin({ bottom: 8})

  // 搜索框
  // 小屏sm:4列,中屏md:6列
  GridCol({span:{xs: 2, sm: 4, md: 6}}){
    Search({placeholder:'搜索...'})
      //...
  }
  .height(48)

  // 滾動條
  // 小屏sm:4列,中屏md:8列
  GridCol({span:{ xs: 4, sm: 4, md:8 }}){
    Swiper(){
      //...
    }
    .height(144)
    .itemSpace(12)
    .autoPlay(true)
    // 小屏時顯示一個頁面,中屏時顯示兩個頁面
    .displayCount(this.currentbp == 'md' ? 2 : 1)
  }
  .height(144)
}
.height('100%')
.width('100%')
.padding({top:10,bottom:10,left:10,right:10})
// 獲取斷點
.onBreakpointChange((breakpoint)=>{
  this.currentbp = breakpoint
})

完整代碼

本例完整代碼如下:
示例中用到的資源請替換為開發者本地資源。

//AdaptiveUI.ets
@Entry
@Component
export struct HomePage{
  @State currentbp: string = ''

  build(){
    GridRow({
      // 劃分屏幕:最小屏4列、小屏4列、中屏8列
      columns:{xs: 4, sm: 4, md: 8},
      gutter:{x:24},
      // 設置最小屏到小屏,小屏到中屏兩個斷點
      breakpoints: { value: ["320vp", "520vp"] }
    }){
    
      // 文本框:首頁
      // 小屏sm:4列,中屏md:2列
      GridCol({span:{ xs: 2, sm: 4, md: 2}}){
        Row() {
          Text("首頁")
            .fontSize(24)
            .fontWeight(500)
            .width('100%')
            .margin({
              top: 12,
              bottom: 12,
              left: 12
            })
        }
      }
      .height(56)
      .margin({ bottom: 8})
    
      // 搜索框
      // 小屏sm:4列,中屏md:6列
      GridCol({span:{xs: 2, sm: 4, md: 6}}){
        Search({placeholder:'搜索...'})
          .width('100%')
          .height(40)
          .margin({ bottom: 8})
          .placeholderFont({ size: 16 })
      }
      .height(48)
    
      // 滾動條
      // 小屏sm:4列,中屏md:8列
      GridCol({span:{ xs: 4, sm: 4, md:8 }}){
        Swiper(){
          ForEach(SwiperList, (item: CardItem) => {
            Stack({ alignContent: Alignment.TopStart }) {
              Image(item.img)
                .width('100%')
                .height('100%')
                .borderRadius(16)
                .objectFit(ImageFit.Cover)
    
              Column() {
                Text(item.title)
                  .fontSize(16)
                  .fontColor(Color.White)
                  .margin({ bottom: 4 })
                Text(item.info)
                  .fontSize(12)
                  .fontColor(Color.White)
                  .opacity(0.6)
              }
              .alignItems(HorizontalAlign.Start)
              .margin({ top: 20, left: 14 })
            }
          }, item => JSON.stringify(item))
        }
        .height(144)
        .itemSpace(12)
        .autoPlay(true)
        // 小屏時顯示一個頁面,中屏時顯示兩個頁面
        .displayCount(this.currentbp == 'md' ? 2 : 1)
      }
      .height(144)
    
    }
    .height('100%')
    .width('100%')
    .padding({top:10,bottom:10,left:10,right:10})
    // 獲取斷點
    .onBreakpointChange((breakpoint)=>{
      this.currentbp = breakpoint
    })
  }
}

參考

想了解更多關于開源的內容,請訪問:

51CTO 開源基礎軟件社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 開源基礎軟件社區
相關推薦

2014-09-05 10:10:32

Android自適應布局設計

2010-08-26 16:27:46

CSS高度

2012-05-09 10:58:25

JavaMEJava

2011-12-27 10:18:31

Web

2012-06-04 09:48:04

jQuery

2024-09-29 10:34:31

FlaskPythonAPI

2017-06-06 10:30:12

前端Web寬度自適應

2022-04-15 11:05:28

移動端自適應高清

2021-04-28 09:56:44

鴻蒙HarmonyOS應用

2010-08-30 09:52:03

DIV高度自適應

2024-01-09 13:34:35

2010-08-30 10:26:20

DIV自適應高度

2023-07-31 08:24:34

MySQL索引計數

2019-01-31 13:43:48

Spring BootStarter開發

2023-10-23 08:48:04

CSS寬度標題

2024-05-22 09:31:07

2025-01-21 08:00:00

自適應框架框架開發

2022-04-12 07:48:57

云技術SDN網絡

2022-10-24 17:57:06

CSS容器查詢

2011-05-12 11:28:20

按比例縮放
點贊
收藏

51CTO技術棧公眾號

国产精品四虎| 依依成人综合网| 国产精品一区二区三区av| 日韩88av| 欧洲精品中文字幕| 日本一区二区三区www| 成年人晚上看的视频| 久久亚洲国产| 亚洲成av人乱码色午夜| 欧美激情国产精品日韩| 生活片a∨在线观看| 成人精品亚洲人成在线| 日韩美女主播视频| 麻豆精品国产免费| 日韩电影不卡一区| 欧美日韩1234| 欧美视频在线免费播放| 北条麻妃在线| 99久久99久久综合| 成人在线观看视频网站| 亚洲久久久久久久| 四虎精品一区二区免费| 午夜欧美视频在线观看| 亚洲资源视频| 嫩草精品影院| 日韩中文字幕区一区有砖一区 | 国产中年熟女高潮大集合| 最新国产在线拍揄自揄视频| 麻豆精品视频在线观看视频| 国内精品小视频在线观看| 91无套直看片红桃在线观看| 韩国女主播一区二区| 亚洲一区免费在线观看| 伊人久久青草| 国产婷婷在线视频| 日韩黄色免费网站| 欧美伊久线香蕉线新在线| 中文字幕在线观看成人| 久久成人综合| 在线视频免费一区二区| 黑人巨大精品欧美| 黄色美女久久久| 日韩欧美不卡在线观看视频| 在线观看免费av网址| 91精品韩国| 色先锋资源久久综合| 777777av| 色是在线视频| 亚洲成av人片在线观看无码| 国产精品视频网站在线观看| free性欧美hd另类精品| 中文字幕视频一区| 亚洲欧洲三级| av中文资源在线| 国产女主播视频一区二区| 蜜桃av噜噜一区二区三区| 少妇av在线播放| thepron国产精品| 日本欧美精品在线| 久久久久久久久久影院| 国产偷自视频区视频一区二区| 久久久久国产精品www| 校园春色 亚洲| 欧美日韩一视频区二区| 欧美精品制服第一页| 国产免费一区二区三区四区| 在线观看日韩| 九九九久久久久久| 国产一级淫片免费| 亚洲狼人精品一区二区三区| 91av在线网站| 欧美成人一区二区三区四区| 蜜桃视频第一区免费观看| 国产乱人伦真实精品视频| 久久久久久久久久91| 国产精品红桃| 69av在线视频| 精品一区二区无码| 极品销魂美女一区二区三区| 不卡一区二区三区四区五区| 亚洲色欧美另类| 国产清纯在线一区二区www| 亚洲在线不卡| 国产网红在线观看| 日韩欧美成人免费视频| 三级a在线观看| 欧洲精品99毛片免费高清观看 | 97se亚洲国产综合自在线 | 神马亚洲视频| 久久成人羞羞网站| 96精品久久久久中文字幕| 亚洲AV无码国产精品午夜字幕| 91视视频在线观看入口直接观看www | 日韩一区欧美小说| 人妻av无码专区| 成人激情综合| 日韩欧美专区在线| www.久久国产| 欧美精品偷拍| 国产精品精品国产| www.五月天激情| 久久久久国产免费免费| 51xx午夜影福利| 另类专区亚洲| 精品久久久久久久人人人人传媒| 精品人妻无码一区二区三区换脸| 在线成人激情| 国产精品久久久久久久一区探花| www.久久伊人| 国产精品视频在线看| 2019日韩中文字幕mv| 黄网址在线观看| 精品久久久久久中文字幕| 超碰人人爱人人| 主播大秀视频在线观看一区二区| 精品国产三级电影在线观看| 国产又大又粗又爽的毛片| 欧美精品黄色| 日韩av成人在线| 亚洲成人一二三区| 中文字幕电影一区| 激情五月宗合网| 国产精品色婷婷在线观看| 亚洲欧美福利视频| 国产午夜久久久| 国内不卡的二区三区中文字幕| 久久青青草综合| 丁香高清在线观看完整电影视频| 欧美放荡的少妇| 免费看黄色三级| 麻豆亚洲精品| 久久久99国产精品免费| 男女在线观看视频| 91精品国产综合久久精品图片| 中文字幕免费高清| 国产精品久久久一区二区| 成人激情av| av网址在线免费观看| 欧美日韩国产影片| 午夜精产品一区二区在线观看的| 亚洲免费播放| 国产亚洲一区二区三区在线播放| 日本高清成人vr专区| 9191久久久久久久久久久| 激情文学亚洲色图| 日韩视频一区二区三区四区| 色噜噜狠狠狠综合曰曰曰88av| 青青视频在线免费观看| 91视频在线看| 日本中文字幕片| 秋霞影视一区二区三区| 午夜精品一区二区三区在线播放| 亚洲美女福利视频| 亚洲国产综合人成综合网站| 人妻av一区二区三区| 欧美 日韩 国产精品免费观看| 91色视频在线导航| 国产最新在线| 精品美女在线观看| 日韩成人免费在线视频| 日韩精品乱码av一区二区| 久久人人九九| 桃子视频成人app| 伊人成人开心激情综合网| 波多野结衣毛片| 中文av字幕一区| 爱豆国产剧免费观看大全剧苏畅 | 国产一卡二卡三卡| 中文字幕第一区综合| 羞羞的视频在线| 欧美福利电影在线观看| 国产免费一区二区| 亚洲一二三四| 中文字幕亚洲一区在线观看 | 成人综合婷婷国产精品久久 | 国产67194| 成人一区二区三区在线观看| 日韩欧美视频网站| 欧美一区二区三区激情视频| 成人h视频在线| 国产第一页在线视频| 精品夜色国产国偷在线| 欧美日韩 一区二区三区| 国产精品护士白丝一区av| 国产视频在线观看网站| 国语一区二区三区| 久久手机免费视频| 国产小视频一区| 色综合久久中文字幕综合网| 制服丨自拍丨欧美丨动漫丨| 高清国产一区二区| 国产女大学生av| 亚洲a一区二区三区| 精品乱码一区二区三区| 欧美性www| 97在线视频免费播放| 91av资源在线| 亚洲精品不卡在线| 91成人在线免费| 黑人精品xxx一区一二区| jizzjizz日本少妇| jvid福利写真一区二区三区| xx欧美撒尿嘘撒尿xx| 亚洲激情网址| 午夜啪啪免费视频| 伊人久久综合影院| 91久久极品少妇xxxxⅹ软件| 免费污视频在线一区| 欧美日韩第一页| av大片在线播放| 亚洲精选中文字幕| 国产成人av免费看| 欧美午夜精品久久久| 日本在线小视频| 亚洲激情网站免费观看| 中文字幕被公侵犯的漂亮人妻| 高清视频一区二区| 91 在线视频观看| 久久精品天堂| 日韩小视频在线播放| 99久久夜色精品国产亚洲狼| 免费一区二区三区| 97品白浆高清久久久久久| 91精品国产综合久久香蕉最新版 | 国产三级三级看三级| 日韩一级精品| 国产911在线观看| 日韩欧美一区免费| 欧美韩国日本精品一区二区三区| a日韩av网址| 欧美极品少妇与黑人| 黄色免费在线网站| 夜夜嗨av一区二区三区四区| 四虎精品成人影院观看地址| 日韩欧美一二区| 国产乱码精品一区二区| 欧美日韩在线一区二区| 国产99久久久久久免费看| 富二代精品短视频| 可以免费在线观看的av| 午夜精品福利在线| 国产又大又黑又粗免费视频| 2023国产一二三区日本精品2022| 9191在线视频| 亚洲专区免费| 国产精品无码人妻一区二区在线| 欧美黄色aaaa| 国产欧美123| 黄色亚洲免费| www.好吊操| 精品1区2区3区4区| 国产黄色激情视频| 亚洲小说区图片区| 国产在线播放观看| 一本久道久久综合狠狠爱| 国产精品国产亚洲精品看不卡| 999在线观看精品免费不卡网站| 国产玉足脚交久久欧美| 最新日韩av| 精品99在线视频| 日韩成人午夜电影| 中文字幕永久有效| 国产一区视频网站| 欧洲成人午夜精品无码区久久| 福利电影一区二区三区| 蜜臀av粉嫩av懂色av| 91最新地址在线播放| 女尊高h男高潮呻吟| 久久精品欧美日韩| 网爆门在线观看| 一二三区精品视频| 国产精品老女人| 欧美亚洲高清一区二区三区不卡| 国产又爽又黄免费软件| 日韩一区二区免费高清| 人妻少妇精品无码专区久久| 亚洲视频在线观看| 日本a在线播放| 欧美极品欧美精品欧美视频 | 欧美日韩美女在线观看| 中文字幕69页| 91精品国产综合久久精品app| 全国男人的天堂网| 亚洲三级黄色在线观看| 米奇精品一区二区三区| 久久久久国产精品免费网站| 一区二区电影免费观看| 成人免费网站在线观看| 久久97久久97精品免视看秋霞| 欧美精品欧美精品| 亚洲在线久久| 免费无码av片在线观看| 狠狠色丁香久久婷婷综合_中| 亚洲午夜久久久久久久久| 欧美国产精品v| 国产亚洲第一页| 欧美在线综合视频| 亚洲成人第一区| 少妇久久久久久| 欧美激情20| 2022国产精品| 欧美精选一区二区三区| 青草网在线观看| 久久国产精品无码网站| 国产精品福利导航| 国产精品女人毛片| www.国产com| 精品国产凹凸成av人网站| 91caoporm在线视频| 久久免费精品视频| 欧美影视资讯| 精品一卡二卡三卡四卡日本乱码 | 99国产精品一区二区三区| 亚洲美女av电影| 青草影视电视剧免费播放在线观看| 国产精品扒开腿做| 久久动漫网址| 国产911在线观看| 韩国av一区二区| 亚洲精品一区二区三区影院忠贞| 亚洲成人tv网| 国产肥老妇视频| 久久久国产精品一区| 播放一区二区| 免费看成人午夜电影| 激情欧美亚洲| 永久免费看片在线观看| 国产精品无人区| 天天操天天干天天摸| 亚洲精品日韩欧美| 国产资源在线观看入口av| 欧美一级片免费在线| 亚洲图色一区二区三区| 亚洲一区二区高清视频| 三级欧美在线一区| 一本加勒比北条麻妃| 婷婷中文字幕综合| 人妻丰满熟妇av无码区hd| 欧美风情在线观看| 免费观看性欧美大片无片| 午夜在线视频免费观看| 美女视频黄频大全不卡视频在线播放| 这里只有久久精品| 色哟哟一区二区在线观看| 艳母动漫在线看| 欧美在线免费观看| 亚洲美女久久| 蜜臀av午夜一区二区三区| 久久伊人蜜桃av一区二区| 国产农村妇女aaaaa视频| 国产视频久久网| 日本成人三级电影| 日本午夜精品一区二区三区| 天使萌一区二区三区免费观看| 国产真实乱人偷精品人妻| 欧美天堂亚洲电影院在线播放| av电影在线观看| 亚洲a区在线视频| 国产综合色产| 国产白嫩美女无套久久| 欧美色xxxx| av大片在线观看| 亚洲999一在线观看www| 国产精品a级| 黄色工厂在线观看| 亚洲精品高清视频在线观看| av 一区二区三区| 国内精品久久久久影院优| 亚洲bt欧美bt精品777| 99视频免费播放| 亚洲欧洲精品天堂一级| 亚洲av无码一区二区三区性色 | 亚洲欧美999| 成人午夜毛片| 国产 欧美 日本| 久久先锋影音av鲁色资源| 日本妇乱大交xxxxx| 久久伊人91精品综合网站| 黄色成人美女网站| 国产aaaaa毛片| 亚洲精品乱码久久久久久黑人 | 中国av一区二区三区| 国产片在线播放| 97不卡在线视频| 99久精品视频在线观看视频| 动漫美女无遮挡免费| 色激情天天射综合网| 成人看av片| 蜜桃av久久久亚洲精品| 国产中文字幕一区| 久久久久久久久久久久久久av| 日韩在线免费高清视频| 成人看片爽爽爽| 无限资源日本好片| 亚洲成av人综合在线观看| 91在线品视觉盛宴免费| 国产伦视频一区二区三区| 蜜桃一区二区三区在线观看| 国产精品二区一区二区aⅴ| 中文字幕精品久久|