arkui

43 阅读3分钟

Navigation

Navigation组件一般作为页面的根容器,包括单页面、分栏和自适应三种显示模式。同时,Navigation提供了属性来设置页面的标题栏、工具栏、导航栏等。

设置页面显示模式

自适应模式

Navigation组件默认为自适应模式,此时mode属性为NavigationMode.Auto。自适应模式下,当设备宽度大于520vp时,Navigation组件采用分栏模式,反之采用单页面模式。

Navigation() {
  ...
}
.mode(NavigationMode.Auto)
单页面模式

分栏模式

@Entry
@Component
struct NavPage {
  @State message: string = 'Hello World'
  private arr: number[] = [1, 2, 3];

  build() {
    Row() {
      Column() {
        Navigation() {
          // TextTimer()
          Text('ss')
          List({ space: 12 }) {
            ForEach(this.arr, (item) => {
              ListItem() {
                NavRouter() {
                  Text("NavRouter" + item)
                    .width("100%")
                    .height(72)
                    .backgroundColor('#FFFFFF')
                    .borderRadius(24)
                    .fontSize(16)
                    .fontWeight(500)
                    .textAlign(TextAlign.Center)
                  NavDestination() {
                    Text("NavDestinationContent" + item)
                  }
                  // .title("NavDestinationTitle" + item)
                }
              }

            }, item => item)

          }

        }
        .mode(NavigationMode.Split)
        .width('100%')
      }
      .height('100%')
    }
  }
}

设置工具栏

Navigation() {
  ...
}
.toolBar({items:[
        {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=>{}},
        {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=>{}},
        {value: "func", icon: "./image/ic_public_highlights.svg", action: ()=>{}}]})

Tabs

基本布局

Tabs() {
  TabContent() {
    Text('首页的内容').fontSize(30)
  }
  .tabBar('首页')

  TabContent() {
    Text('推荐的内容').fontSize(30)
  }
  .tabBar('推荐')

  TabContent() {
    Text('发现的内容').fontSize(30)
  }
  .tabBar('发现')
  
  TabContent() {
    Text('我的内容').fontSize(30)
  }
  .tabBar("我的")
}
  • TabContent组件不支持设置通用宽度属性,其宽度默认撑满Tabs父组件。
  • TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定。

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

 TabContent() {
   Text('首页的内容').fontSize(30)
 }
.tabBar('首页')

底部导航

导航栏位置使用Tabs的参数barPosition进行设置,默认情况下,导航栏位于顶部,参数默认值为Start。设置为底部导航需要在Tabs传递参数,设置barPosition为End。

Tabs({ barPosition: BarPosition.End }) {
  // TabContent的内容:首页、发现、推荐、我的
  ...
}
Row() {
          Column() {
            Tabs({ barPosition: BarPosition.End }) {

              TabContent() {
                Text('首页的').fontSize(10)
              }.tabBar('首页')

              TabContent() {
                Text('首页的内容').fontSize(10)
              }.tabBar('首页')
            }
            .barMode(BarMode.Fixed)
          }
        }

绘制几何图形

创建绘制组件

绘制组件使用Shape作为父组件,实现类似SVG的效果。接口调用为以下形式:

Shape(value?: PixelMap)
//
//该接口用于创建带有父组件的绘制组件,其中value用于设置绘制目标,可将图形绘制在指定的PixelMap对象中,若//未////设置,则在当前绘制目标中进行绘制

Shape() {
  Rect().width(300).height(50)
}
//完整
        Shape() {
          Rect().width('100%').height('100%').fill('#0097D4')
          Circle({ width: 75, height: 75 }).fill('#E87361')
        }

使用画布绘制自定义图

使用画布组件绘制自定义图形

可以由以下三种形式在画布绘制自定义图形:

@Entry
@Component

  //create user:16054;
  //vriten :2
  // testinfo:自定义图型
struct CustomizeGraph {
  @State message: string = 'Hello World'
  //用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿,true表明开启抗锯齿。
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  //用来创建CanvasRenderingContext2D对象,通过在canvas中调用CanvasRenderingContext2D对象来绘制。
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

  build() {
    Row() {
      Column() {
        Text(this.message)
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#F5DC62')
          .onReady(() => {
            //可以在这里绘制内容。
            this.context.strokeRect(50, 50, 200, 150);
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

在Canvas上加载Lottie动画时,需要先按照如下方式下载Lottie。

import lottie from '@ohos/lottie'