鸿蒙5.0开发进阶:ArkTS组件-元服务(AtomicServiceNavigation)

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


AtomicServiceNavigation

作为Page页面的根容器使用,其内部默认包含了标题栏、内容区,其中内容区默认首页显示导航内容或非首页显示(NavDestination的子组件),首页和非首页通过路由进行切换。

说明

该组件从API Version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

导入模块

import { AtomicServiceNavigation } from '@kit.ArkUI';

子组件

可以包含子组件。

从API Version 10开始,推荐使用NavPathStack进行页面路由。

AtomicServiceNavigation

AtomicServiceNavigation({
    navPathStack?: NavPathStack,
    navigationContent: Callback<void>,
    title?: ResourceStr,
    titleBackgroundColor?: ResourceColor,
    hideTitleBar?: boolean,
    navBarWidth?: Length,
    mode?: NavigationMode,
    navDestinationBuilder?: NavDestinationBuilder,
    navBarWidthRange?: [Dimension, Dimension],
    minContentWidth?: Dimension,
    stateChangeCallback?: Callback<boolean>,
    modeChangeCallback?: Callback<NavigationMode>
})

元服务API: 从API version 12开始,该接口支持在元服务中使用。

装饰器类型: @Component

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数

名称类型必填装饰器类型说明
navPathStackNavPathStack@State路由栈信息。
navigationContentCallback<void>@BuilderParamNavigation容器内容。
titleResourceStr@Prop设置页面标题。
titleOptionsTitleOptions@Prop标题栏选项。
hideTitleBarboolean@Prop设置是否隐藏标题栏。
navBarWidthLength@Prop

设置导航栏宽度。

仅在Navigation组件分栏时生效。

modeNavigationMode@Prop

设置导航栏的显示模式。

支持Stack、Split与Auto模式。

navDestinationBuilderNavDestinationBuilder@BuilderParam创建NavDestination组件所需要的Builder数据。
navBarWidthRange[DimensionDimension]@Prop设置导航栏最小和最大宽度(双栏模式下生效)。
minContentWidthDimension@Prop设置导航栏内容区最小宽度(双栏模式下生效)。
stateChangeCallbackCallback<boolean>-导航栏显示状态切换时触发该回调。
modeChangeCallbackCallback<NavigationMode>-当Navigation首次显示或者单双栏状态发生变化时触发该回调。

TitleOptions

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

名称类型必填说明
backgroundColorResourceColor标题栏背景颜色。
isBlurEnabledboolean标题栏是否模糊,默认为true。
barStyleBarStyle12+标题栏样式属性设置。

type NavDestinationBuilder = (name: string, param?: Object) => void

元服务API: 从API version 12开始,该接口支持在元服务中使用。

系统能力: SystemCapability.ArkUI.ArkUI.Full

参数名类型必填描述
namestringNavDestination页面名称。
paramObjectNavDestination页面详细参数。

示例

// Index.ets
import { AtomicServiceNavigation, NavDestinationBuilder, AtomicServiceTabs, TabBarOptions, TabBarPosition } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State message: string = '主题';
  childNavStack: NavPathStack = new NavPathStack();
  @Builder
  tabContent1() {
    Text('first page')
      .onClick(() => {
        this.childNavStack.pushPath({ name: 'page one' })
      })
  }

  @Builder
  tabContent2() {
    Text('second page')
  }

  @Builder
  tabContent3() {
    Text('third page')
  }

  @Builder
  navigationContent() {
    AtomicServiceTabs({
      tabContents: [
        () => {
          this.tabContent1()
        },
        () => {
          this.tabContent2()
        },
        () => {
          this.tabContent3()
        }
      ],
      tabBarOptionsArray: [
        new TabBarOptions($r('sys.media.ohos_ic_public_phone'), '功能1'),
        new TabBarOptions($r('sys.media.ohos_ic_public_location'), '功能2', Color.Green, Color.Red),
        new TabBarOptions($r('sys.media.ohos_ic_public_more'), '功能3')
      ],
      tabBarPosition: TabBarPosition.BOTTOM,
      barBackgroundColor: $r('sys.color.ohos_id_color_bottom_tab_bg'),
      onTabBarClick: (index: Number) => {
        if (index == 0) {
          this.message = '功能1';
        } else if (index == 1) {
          this.message = '功能2';
        } else {
          this.message = '功能3';
        }
      }
    })
  }

  @Builder
  pageMap(name: string) {
    if (name === 'page one') {
      PageOne()
    } else if (name === 'page two') {
      PageTwo()
    }
  }

  build() {
    Row() {
      Column() {
        AtomicServiceNavigation({
          navigationContent: () => {
            this.navigationContent()
          },
          title: this.message,
          titleOptions: {
            backgroundColor: 'rgb(61, 157, 180)',
            isBlurEnabled: false
          },
          navDestinationBuilder: this.pageMap,
          navPathStack: this.childNavStack,
          mode: NavigationMode.Stack
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

@Component
export struct PageOne {
  pageInfo: NavPathStack = new NavPathStack();

  build() {
    NavDestination() {
      Button('Next')
        .onClick(() => {
          this.pageInfo.pushPath({ name: 'page two'})
        })
    }
    .title('PageOne')
    .onReady((context: NavDestinationContext) => {
      this.pageInfo = context.pathStack;
    })
  }
}

@Component
export struct PageTwo {
  pageInfo: NavPathStack = new NavPathStack();

  build() {
    NavDestination() {
      Button('End')
    }
    .title('PageTwo')
    .onReady((context: NavDestinationContext) => {
      this.pageInfo = context.pathStack;
    })
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值