效果演示

代码实现

import { window } from '@kit.ArkUI'

interface NavInterface {
  navImg: ResourceStr,
  navTitle: string
}

@Entry
@Component
struct Index {
  @State nav_list: NavInterface[] = [
    {
      navImg: $r('app.media.zfb_nav1'),
      navTitle: '滴滴出行'
    },
    {
      navImg: $r('app.media.zfb_nav2'),
      navTitle: '生活缴费'
    },
    {
      navImg: $r('app.media.zfb_nav3'),
      navTitle: '股票'
    },
    {
      navImg: $r('app.media.zfb_nav4'),
      navTitle: '蚂蚁森林'
    },
    {
      navImg: $r('app.media.zfb_nav5'),
      navTitle: '手机充值'
    },
    {
      navImg: $r('app.media.zfb_nav6'),
      navTitle: '余额宝'
    },
    {
      navImg: $r('app.media.zfb_nav7'),
      navTitle: '花呗'
    },
    {
      navImg: $r('app.media.zfb_nav8'),
      navTitle: '飞猪旅行'
    },
    {
      navImg: $r('app.media.zfb_nav9'),
      navTitle: '淘票票'
    },
    {
      navImg: $r('app.media.zfb_nav10'),
      navTitle: '饿了吗'
    },
    {
      navImg: $r('app.media.zfb_nav11'),
      navTitle: '读书听书'
    },
    {
      navImg: $r('app.media.zfb_nav12'),
      navTitle: '基金'
    },
    {
      navImg: $r('app.media.zfb_nav13'),
      navTitle: '直播广场'
    },
    {
      navImg: $r('app.media.zfb_nav14'),
      navTitle: '医疗健康'
    },
    {
      navImg: $r('app.media.zfb_nav15_more'),
      navTitle: '更多'
    },
  ]

  async aboutToAppear() {
    let w = await window.getLastWindow(getContext())
    w.setWindowSystemBarProperties({
      statusBarColor: '#000',
      statusBarContentColor: '#000'
    })
  }

  build() {
    // 思路:
    // 1、整体的Stack布局 + 底部的Tab导航栏
    // 2、主题区域的架子: 头部 + 主题页面 (层叠关系,主题页面可滚动)
    Stack({ alignContent: Alignment.Bottom }) {
      //   主体展示区
      Stack({ alignContent: Alignment.Top }) {
        //   头部
        Row() {
          // 左边
          Column() {
            /*
            Row() {
              Text('北京')
                .fontColor('#fff')
                .fontSize(18)
              Image($r('app.media.zfb_head_down'))
                .fillColor('#fff')
                .width(10)
            }
            .margin({ right: 12 })

            Text('晴 2℃')
              .fontColor('#fff')
              .fontSize(12)
             */

            Text('北京')
              .fontColor('#fff')
              .fontSize(18)
            Text('晴 2℃')
              .fontColor('#fff')
              .fontSize(12)
            Image($r('app.media.zfb_head_down'))
              .fillColor('#fff')
              .width(12)
              .position({
                x: 40,
                y: 0
              })
          }

          // .alignItems(HorizontalAlign.Start)
          // .margin({right: 12})

          // 中间
          Row() {
            Image($r('app.media.zfb_head_search'))// .fillColor('#fff')
              .width(20)
              .fillColor('#666')
              .margin({ left: 5 })

            Text('北京交通一卡通')
              .layoutWeight(1)
              .margin({ left: 8 })

            Text('搜索')
              .fontColor('#5b73de')
              .fontWeight(700)
              .width(55)// .backgroundColor(Color.Pink)
              .textAlign(TextAlign.Center)
              .border({
                width: { left: 1 },
                color: '#ccc'
              })
          }
          // .justifyContent(FlexAlign.SpaceBetween)
          .layoutWeight(1)
          .height(32)
          .backgroundColor('#fff')
          .borderRadius(5)
          .margin({ left: 25, right: 12 })

          // 右边
          Image($r('app.media.zfb_head_plus'))
            .fillColor('#fff')
            .width(30)
        }
        .width('100%')
        .height(60)
        .backgroundColor('#5b73de')
        .zIndex(1)
        .padding({ left: 10, right: 10 })

        //   主体页面
        Scroll() {
          Column() {
            // 顶部快捷按钮
            Row() {
              Column() {
                Image($r('app.media.zfb_top_scan'))
                  .width(36)
                  .fillColor('#fff')
                Text('扫一扫')
                  .fontColor('#fff')
              }

              Column() {
                Image($r('app.media.zfb_top_pay'))
                  .width(36)
                  .fillColor('#fff')
                Text('首付款')
                  .fontColor('#fff')
              }

              Column() {
                Image($r('app.media.zfb_top_travel'))
                  .width(36)
                  .fillColor('#fff')
                Text('出行')
                  .fontColor('#fff')
              }

              Column() {
                Image($r('app.media.zfb_top_card'))
                  .width(36)
                  .fillColor('#fff')
                Text('卡包')
                  .fontColor('#fff')
              }

              // .justifyContent(FlexAlign.Center)
            }
            .padding({ top: 5, bottom: 15 })
            .backgroundColor('#5b73de')
            .width('100%')
            .justifyContent(FlexAlign.SpaceAround)

            // 主题内容区
            Column() {
              // 导航区
              Grid() {
                ForEach(this.nav_list, (item: NavInterface) => {
                  GridItem() {
                    Column({ space: 8 }) {
                      Image(item.navImg)
                        .width(28)
                      Text(item.navTitle)
                        .fontSize(12)
                        .fontColor('#666')
                    }
                  }
                })
              }
              .rowsTemplate('1fr 1fr 1fr')
              .columnsTemplate('1fr 1fr 1fr 1fr 1fr')
              .height(200)

              // 产品区
              Row({ space: 5 }) {
                Image($r('app.media.zfb_pro_pic1'))
                  .layoutWeight(1)
                Image($r('app.media.zfb_pro_pic2'))
                  .layoutWeight(1)
                Image($r('app.media.zfb_pro_pic3'))
                  .layoutWeight(1)
              }
              .width('100%')
              .padding(10)

              // 市民中心
              Column({ space: 10 }) {
                Image($r('app.media.zfb_pro_list1'))
                  .width('100%')
                Image($r('app.media.zfb_pro_list2'))
                  .width('100%')
              }
              .padding(10)
            }
            .width('100%')
            .backgroundColor('#f6f6f6')
            .borderRadius({
              topLeft: 20,
              topRight: 20
            })
            .height(1000)

          }
          .width('100%')
          .padding({ top: 60, bottom: 60 })
        }

      }
      .width('100%')
      .height('100%')

      //   底部Tab导航区
      Row() {
        Column() {
          Image($r('app.media.zfb_tab_home'))
            .width(35)
        }

        Column() {
          Image($r('app.media.zfb_tab_money'))
            .width(28)
            .margin({ bottom: 2 })
          Text('理财')
          // .fontSize(28)
        }


        Column() {
          Image($r('app.media.zfb_tab_life'))
            .width(28)
            .margin({ bottom: 2 })
          Text('生活')
          // .fontSize(28)
        }

        Column() {
          Image($r('app.media.zfb_tab_chat'))
            .width(28)
            .margin({ bottom: 2 })
          Text('消息')
          // .fontSize(28)
        }

        Column() {
          Image($r('app.media.zfb_tab_me'))
            .width(28)
            .margin({ bottom: 2 })
          Text('我的')
          // .fontSize(28)
        }

      }
      .height(60)
      .width('100%')
      .backgroundColor('#fbfcfe')
      .justifyContent(FlexAlign.SpaceAround)

    }
    .width('100%')
    .height('100%')
    .backgroundColor('#5b73de')

    // .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
  }
}

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐