<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      鴻蒙應(yīng)用開發(fā)從入門到實戰(zhàn)(十九):樣式復(fù)用案例

      大家好,我是潘Sir,持續(xù)分享IT技術(shù),幫你少走彎路。《鴻蒙應(yīng)用開發(fā)從入門到項目實戰(zhàn)》系列文章持續(xù)更新中,陸續(xù)更新AI+編程、企業(yè)級項目實戰(zhàn)等原創(chuàng)內(nèi)容、歡迎關(guān)注!

      上一篇文章講解了ArkUI中樣式復(fù)用思想,本節(jié)繼續(xù)使用自定義組件對商品列表進(jìn)行優(yōu)化。

      復(fù)習(xí)知識內(nèi)容:

      • 創(chuàng)建自定義組件
      • @Builder
      • @Styles

      在原來pages/layout/ProductList.ets基礎(chǔ)上進(jìn)行優(yōu)化

      1待優(yōu)化界面

      一、自定義組件優(yōu)化頭部

      實際項目開發(fā)中,存在多個界面共享頂部的情況。因此把頂部抽取出來作為自定義組件共用。

      2多界面共享頂部

      1.1 靜態(tài)頭部制作

      拷貝ic_public_back.png和ic_public_refresh.png到resources/base/media目錄

      拷貝pages/layout/list/ProductList.ets文件,重命名為ProductListLast.ets

      (直接復(fù)制的文件,不會再resources/base/profile/main_pages.json文件中配置路由,需要手動設(shè)置:"pages/layout/list/ProductListLast",)

      修改標(biāo)題部分:

      // 標(biāo)題
            Row() {
              Image($r('app.media.ic_public_back'))
                .width(30)
      
              Text('商品列表')
                .fontSize(30)
                .fontWeight(FontWeight.Bold)
              
              Blank()
      
              Image($r('app.media.ic_public_refresh'))
                .width(30)
            }
            .width('100%')
            // .height(30) //控制高度
            .margin({ bottom: 20 })
      

      效果

      3頂部完善

      1.2 頭部抽取為組件

      1.2.1 抽取到同一個文件中

      // 自定義頂部組件
      @Component
      struct Header {
        private title: ResourceStr
      
        build() {
          // 標(biāo)題
          Row() {
            Image($r('app.media.ic_public_back'))
              .width(30)
      
            Text(this.title) //從外層傳入
              .fontSize(30)
              .fontWeight(FontWeight.Bold)
      
            Blank()
      
            Image($r('app.media.ic_public_refresh'))
              .width(30)
          }
          .width('100%')
          // .height(30) //控制高度
          // .margin({ bottom: 20 })  //放到外層控制
        }
      }
      

      原來頭部的內(nèi)容替換為自定義組件使用

      // 使用自定義組件
            Header({ title: '商品列表' })
            .margin({bottom:20})
      

      效果和原來一致。

      1.2.2 單獨抽取為一個文件

      在pages/component目錄新建common目錄,新建ArkTS File,名稱為:CommonComponents.ets,并將自定義頂部組件代碼粘貼進(jìn)去,并通過export將組件導(dǎo)出。

      // 自定義頂部組件
      @Component
      export struct Header {
        private title: ResourceStr
      
        build() {
          // 標(biāo)題
          Row() {
            Image($r('app.media.ic_public_back'))
              .width(30)
      
            Text(this.title) //從外層傳入
              .fontSize(30)
              .fontWeight(FontWeight.Bold)
      
            Blank()
      
            Image($r('app.media.ic_public_refresh'))
              .width(30)
          }
          .width('100%')
          // .height(30) //控制高度
          // .margin({ bottom: 20 })  //放到外層控制
        }
      }
      

      回到ProductListLast.ets文件,導(dǎo)入自定義組件

      // 導(dǎo)入自定義頂部組件
      import {Header} from '../../component/common/CommonComponents'
      

      二、自定義構(gòu)建函數(shù)優(yōu)化UI結(jié)構(gòu)

      以上代碼中,可讀性較差,可以把商品列表的部分封裝起來,自定義組件或自定義構(gòu)建函數(shù)都可以優(yōu)化。

      2.1 全局自定義構(gòu)建函數(shù)

      通過@Builder自定義構(gòu)建函數(shù),將商品卡片信息放置到函數(shù)中,函數(shù)定義在全局

      // 全局自定義構(gòu)建函數(shù)
      @Builder function ItemCard(item:Item2){
        Row({ space: 10 }) {
          Image(item.image)
            .width(100)
          Column({ space: 4 }) {
            if (item.discount) {
              Text(item.name)
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
              Text('原價:¥' + item.price)
                .fontColor('#CCC')
                .fontSize(14)
                .decoration({ type: TextDecorationType.LineThrough })
              Text('折扣價:¥' + (item.price - item.discount))
                .fontColor('#F36')
                .fontSize(18)
              Text('補(bǔ)貼:¥' + item.discount)
                .fontColor('#F36')
                .fontSize(18)
            } else {
              Text(item.name)
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
              Text('¥' + item.price)
                .fontColor('#F36')
                .fontSize(18)
            }
          }
          .height('100%')
          .alignItems(HorizontalAlign.Start)
        }
        .width('100%')
        .backgroundColor('#FFF')
        .borderRadius(20)
        .height(120)
        .padding(10)
      }
      

      將原有線上組件的地方替換為函數(shù)調(diào)用

      ItemCard(item)
      

      這樣,界面效果不變,但是代碼更簡潔,可讀性更高。

      2.2 局部自定義構(gòu)建函數(shù)

      函數(shù)定義在組件內(nèi)部,將以上組件代碼拷貝,并去掉function關(guān)鍵字

      // 局部自定義構(gòu)建函數(shù) 不要function關(guān)鍵字
        @Builder  ItemCard(item:Item2){
        Row({ space: 10 }) {
          Image(item.image)
            .width(100)
          Column({ space: 4 }) {
            if (item.discount) {
              Text(item.name)
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
              Text('原價:¥' + item.price)
                .fontColor('#CCC')
                .fontSize(14)
                .decoration({ type: TextDecorationType.LineThrough })
              Text('折扣價:¥' + (item.price - item.discount))
                .fontColor('#F36')
                .fontSize(18)
              Text('補(bǔ)貼:¥' + item.discount)
                .fontColor('#F36')
                .fontSize(18)
            } else {
              Text(item.name)
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
              Text('¥' + item.price)
                .fontColor('#F36')
                .fontSize(18)
            }
          }
          .height('100%')
          .alignItems(HorizontalAlign.Start)
        }
        .width('100%')
        .backgroundColor('#FFF')
        .borderRadius(20)
        .height(120)
        .padding(10)
      }
      

      在原來商品列表處進(jìn)行調(diào)用,條用局部自定義組件,需要使用this關(guān)鍵字

      this.ItemCard(item) //局部組件使用
      

      三、自定義樣式裝飾器優(yōu)化樣式

      3.1 容器全局樣式

      將Column的通用樣式抽取到自定義樣式函數(shù)fillScreen中

      將fillScreen放到組件外

      // 自定義全局公共樣式
      @Styles function fillScreen(){
        .width('100%')
        .height('100%')
        .backgroundColor('#EFEFEF')
        .padding(20)
      }
      

      使用

      Column({ space: 8 })
      {...}
      // 自定義樣式
      .fillScreen()
      

      3.2 容器局部樣式

      將fillScreen放到組件內(nèi),去掉function關(guān)鍵字

      // 自定義局部公共樣式
        @Styles  fillScreen(){
          .width('100%')
          .height('100%')
          .backgroundColor('#EFEFEF')
          .padding(20)
        }
      

      使用方式不變,抽取后預(yù)覽效果一致。

      3.3 商品信息樣式抽取

      將商品信息樣式中的價格樣式抽取到公共全局樣式中,由于fontColor和fontSize是Text專有的,不是公共樣式,因此使用@Styles會報錯,應(yīng)該使用Extend(Text),并且Textend只能寫在全局。

      // 自定義全局價格樣式
      // @Styles function priceText(){
      @Extend(Text) function priceText(){  //Extend繼承模式不能寫在組件內(nèi),只能寫在全局
        .fontColor('#F36')
        .fontSize(18)
      }
      

      將原來的樣式方法改為自定義方法即可

      // .fontColor('#F36')
      // .fontSize(18)
      .priceText()
      

      這樣,不僅代碼層次更清晰,還可以更方便的維護(hù)和修改,只需要修改公共樣式,其它引用的地方就可以直接被修改。

      《鴻蒙應(yīng)用開發(fā)從入門到項目實戰(zhàn)》系列文章持續(xù)更新中,陸續(xù)更新AI+編程、企業(yè)級項目實戰(zhàn)等原創(chuàng)內(nèi)容,防止迷路,歡迎關(guān)注!

      posted @ 2025-10-11 11:35  程序員潘Sir  閱讀(152)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩高清免费一码二码三码| 亚洲欧美另类久久久精品播放的 | 亚洲国产成人精品无码区在线观看| 绝顶丰满少妇av无码| 国产精品久久久久久爽爽爽| 国模无吗一区二区二区视频| 兰考县| 亚洲综合高清一区二区三区| 超碰成人人人做人人爽| 亚洲二区中文字幕在线| 亚洲欧洲日产国码久在线| 亚洲色大成网站WWW尤物| 一区二区在线观看成人午夜| 99精品国产一区二区三区不卡| 亚洲日韩中文字幕在线播放| 中文字幕一区二区三区四区五区| 一区二区三区四区亚洲综合| 日日碰狠狠添天天爽五月婷| 亚洲中文字幕日产无码成人片| 综合在线 亚洲 成人 欧美| 免费人成视频在线 | 岛国最新亚洲伦理成人| 亚洲一线二线三线品牌精华液久久久 | 国产麻豆精品av在线观看| 色偷偷www.8888在线观看| 亚洲日本精品国产第一区| 蜜桃久久精品成人无码av| 日韩美女一区二区三区视频| 久久久av男人的天堂| 亚洲熟妇无码av另类vr影视| 金寨县| 中文字幕国产精品资源| 亚洲国产精品一区二区第一页| 99久9在线视频 | 传媒| 国产成人99亚洲综合精品| 成人亚欧欧美激情在线观看| 成人自拍短视频午夜福利| 东京热人妻无码一区二区av| 中文国产成人精品久久不卡| 精品在免费线中文字幕久久| 成 人免费va视频|