鸿蒙开发Day02

学习使用ArkTs的ListTabsNavigation等组件

rxlxr的博客

开发环境

  • 开发工具 DevEco Studio
  • 语言 ArkTS
  • SDK 3.1.0(API9)

结果展示

在这里插入图片描述

List组件使用

List是很常用的滚动类容器组件之一,它按照水平或者竖直方向线性排列子组件, List 的子组件必须是 ListItem

使用ForEach对每个item渲染。

import {Card} from '../compoment/Card'
import { brief } from '../entity/brief'

@Component
export struct FindContent {
  @State briefItem: brief = new brief("rxlxr", 20, '计算机', 100, 'http://www.rxlxr.com/images/user/avatar.png')
  @State briefItem2: brief = new brief("rxlxr2", 30, '计算机', 50, 'http://www.rxlxr.com/images/user/avatar.png')
  items: brief[] = [this.briefItem2, this.briefItem2, this.briefItem, this.briefItem2, this.briefItem, this.briefItem2, this.briefItem];

  build() {
    List() { // List默认竖直方向排列子组件
      ForEach(this.items, (item: any, index?: number) => {
        ListItem() {
          Card({
            Content: item,
            Color: '#ffffff',
            Width: 375,
            Height: 150
          })
        }
      })
    }
    .height('100%')
    .width('100%')
    .divider({
      strokeWidth: 6,   // 设置分割线宽度
      color: '#f1f2f4'
    })
  }
}

导航组件

Tabs,Navigation作为导航组件都可以提高页面空间利用率。

Navigation

Navigation组件的页面包含主页和内容页。主页由标题栏、内容区和工具栏组成。通过工具栏同样可以实现与Tabs类似的效果,但是内容页是属于Navigation而不是ToolBar。

本次实例主要使用标题栏所以主要讲解标题栏的使用,想要了解更多,请参考

官方文档

设置导航栏的标题,当参数类型为 string 时,可以直接设置标题,但样式不支修改;当参数为 CustomBuilder 时,可以自定义标题样式。

NavigationTitleMode枚举说明
名称描述
Free当内容为可滚动组件时,标题随着内容向上滚动而缩小(子标题的大小不变、淡出)。向下滚动内容到顶时则恢复原样。
Mini固定为小标题模式。
Full固定为大标题模式。

hideBackButton:是否隐藏返回按钮,默认情况下不隐藏.返回键仅针对titleModeNavigationTitleMode.Mini时才生效

@Builder title() {// 通过Builder自定义标题栏,可以灵活的设置标题样式
      Row() {

        Text('倾心家教')
          .fontSize(20)
      }
      .width('100%')
      .height(55)
      .margin(0)
      .margin({
        left: -20
      })
      .backgroundColor('#6b9d68')

  }
Tabs

Tabs组件的页面组成包含两个部分,分别是TabContent和TabBar。TabContent是内容页,TabBar是导航页签栏,页面结构如下图所示,根据不同的导航类型,布局会有区别,可以分为底部导航、顶部导航、侧边导航,其导航栏分别位于底部、顶部和侧边。

每一个TabContent对应的内容需要有一个页签,可以通过TabContent的tabBar属性进行配置。在如下TabContent组件上设置属性tabBar,可以设置其对应页签中的内容,tabBar作为内容的页签。

在这里插入图片描述


import { FindContent } from '../content/FindContent'
import { HomeContent } from '../content/HomeContent'
import { UserContent } from '../content/UserContent'
@Entry
@Component
struct Index {
  @State currentIndex: number = 0

  @Builder title() {// 通过Builder自定义标题栏,可以灵活的设置标题样式
      Row() {

        Text('倾心家教')
          .fontSize(20)
      }
      .width('100%')
      .height(55)
      .margin(0)
      .margin({
        left: -20
      })
      .backgroundColor('#6b9d68')

  }

  @Builder tabBuilder(index: number, title: string, selectedImage: Resource, normalImage: Resource) {
    Column() {
      Image(this.currentIndex == index ? selectedImage : normalImage)
        .size({width: 25, height:25})
      Text(title)
        .fontColor(this.currentIndex == index ? '#6b9d68' : '#6B6B6B')
    }
    .padding(10)
    .width(70)
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }

  build() {
    Navigation() {
      Tabs({
        index: this.currentIndex,
        barPosition: BarPosition.End
      }){
        TabContent() {
          HomeContent()
        }
        .tabBar(this.tabBuilder(0, '主页', $r('app.media.home_select'), $r('app.media.home')))

        TabContent() {
          FindContent()
        }
        .tabBar(this.tabBuilder(1, '找老师', $r('app.media.search_select'), $r('app.media.search')))

        TabContent() {
          UserContent()
        }
        .tabBar(this.tabBuilder(2, '我', $r('app.media.user_select'), $r('app.media.user')))

      }
      .margin(15)
      .barMode(BarMode.Fixed)
      .onChange((index) => {
        this.currentIndex = index
      })

      //   .backgroundColor('#aabbcc')
    }
    .backgroundColor('#f1f2f4')
    .size({width: '100%', height: '100%'})
    .title(this.title())
    .titleMode(NavigationTitleMode.Mini)
    .hideBackButton(true)
    .width('100%').height('100%')
    .hideToolBar(true)
  }
}

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值