ArkTS开发系列之导航 (2.5.2 页面组件导航)

news2024/11/16 21:29:29

上篇回顾: ArkTS开发系列之导航 (2.5.1 页面路由)

本篇内容:主要学习页面内组件导航

一、 知识储备

1. Navigation

  • 一般作为页面的根容器,包括单页面、分栏和自适应三种显示模式。
    • 自适应模式 (NavigationMode.Auto) ,需要注意的是当设备宽度大于520vp时,Navigation组件采用分栏模式。反之采用单面模式
    @Entry
    @Component
    struct MyRouter {
      build(){
        Column(){
          Navigation(){
            ...
          }
          .mode(NavigationMode.Auto)
        }
      }
    }
    
    • 单页面模式(NavigationMode.Stack)
    • 分栏模式(NavigationMode.Split)
  • NavRouter是配合Navigation使用的特殊子组件,默认提供点击响应处理。有且仅有两个子组件,其中第二个子组件必须是NavDestination。
  • 常用函数
      Navigation() {
        TextInput({ placeholder: '请输入...' })
          .width('90%')
          .height(40)
          .backgroundColor('#ffffff')
    
        List({ space: 12 }) {
          ForEach(this.arr, item => {
            ListItem() {
              NavRouter() {
                Text("NavRouter" + item)
                  .width('100%')
                  .height(72)
                  .backgroundColor(Color.White)
                  .borderRadius(36)
                  .fontSize(16)
                  .fontWeight(500)
                  .textAlign(TextAlign.Center)
                NavDestination() {
                  Text(`NavDestinationContent${item}`)
                }
                .title(`NavDestinationTitle${item}`)
              }
            }
          })
        }
      }
      .title('主标题')
      .mode(NavigationMode.Stack)//导航模式
      .titleMode(NavigationTitleMode.Mini)//标题模式
      .menus([  //设置菜单
        { value: "", icon: './../../../resources/base/media/icon.png', action: () => {
        } },
        { value: "", icon: './../../../resources/base/media/icon.png', action: () => {
        } }
      ])
      .toolBar({ items: [  //设置工具栏
        { value: 'func', icon: './../../../resources/base/media/icon.png', action: () => {
        } },
        { value: 'func', icon: './../../../resources/base/media/icon.png', action: () => {
        } }
      ] })
    

2. Tabs

  • 常用函数
.vertical(false) //tabs垂直与横向设置
    .scrollable(true) //禁止页面滑动
    .barMode((BarMode.Fixed)) //Fixed 固定    Scrollable  可以滑动,当tab多时用
    .onChange((index) => { //页面滑动监听

二、 效果一览

在这里插入图片描述

三、 源码剖析

@Entry
@Component
struct MyTabs {
  private tabsController: TabsController = new TabsController();
  @State currentIndex: number = 0;

  @Builder TabBuild(title: string, targetIndex: number, SelectedImg: Resource, normalImg: Resource) {
    Column() { //自定义tab
      Image(this.currentIndex == targetIndex ? SelectedImg : normalImg)
        .size({ width: 25, height: 25 })
      Text(title)
        .fontSize(16).fontColor(this.currentIndex == targetIndex ? 0x00c250 : 0x333333)
    }
    .width('100%')
    .height(48)
    .justifyContent(FlexAlign.Center)
    .onClick(() => {
      console.error(`targetIndex is ${targetIndex}`)
      this.currentIndex = targetIndex;
      this.tabsController.changeIndex(this.currentIndex)
    })
  }

  build() {
    Tabs({
      barPosition: BarPosition.End,
      controller: this.tabsController
    }) { //end start  首尾位置设置   controller 绑定tabs的控制器
      TabContent() { //内容页面组件
        MyNavigation().backgroundColor(0xf7f7f7)
      }
      .tabBar(this.TabBuild('首页', 0, $r('app.media.ic_hm_home_selected'), $r('app.media.ic_hm_home_normal')))

      TabContent() {
        Text('直播').fontSize(44)
      }
      .tabBar(this.TabBuild('直播', 1, $r('app.media.ic_hm_living_selected'), $r('app.media.ic_hm_living_normal')))

      TabContent() {
        Text('朋友圈').fontSize(44)
      }
      .tabBar(this.TabBuild('朋友圈', 2, $r('app.media.ic_hm_friend_selected'), $r("app.media.ic_hm_friend_normal")))

      TabContent() {
        Text('我的').fontSize(44)
      }
      .tabBar(this.TabBuild('我的', 3, $r('app.media.ic_hm_my_selected'), $r('app.media.ic_hm_my_normal')))
    }
    .vertical(false) //tabs垂直与横向设置
    .scrollable(true) //禁止页面滑动
    .barMode((BarMode.Fixed)) //Fixed 固定    Scrollable  可以滑动,当tab多时用
    .onChange((index) => { //页面滑动监听
      console.error(`this is ${index}`)
      this.currentIndex = index;
      // this.tabsController.changeIndex(this.currentIndex)
    })
  }
}

@Component
struct MyNavigation {
  private arr: number[] = [1, 2, 3];

  build() {
    Column() {
      Navigation() {
        TextInput({ placeholder: '请输入...' })
          .width('90%')
          .height(40)
          .backgroundColor('#ffffff')

        List({ space: 12 }) {
          ForEach(this.arr, item => {
            ListItem() {
              NavRouter() {
                Text("NavRouter" + item)
                  .width('100%')
                  .height(72)
                  .backgroundColor(Color.White)
                  .borderRadius(36)
                  .fontSize(16)
                  .fontWeight(500)
                  .textAlign(TextAlign.Center)
                NavDestination() {
                  Text(`NavDestinationContent${item}`)
                }
                .title(`NavDestinationTitle${item}`)
              }
            }
          })
        }
      }
      .title('主标题')
      .mode(NavigationMode.Stack)
      .titleMode(NavigationTitleMode.Mini)
      .menus([
        { value: "", icon: './../../../resources/base/media/icon.png', action: () => {
        } },
        { value: "", icon: './../../../resources/base/media/icon.png', action: () => {
        } }
      ])
      .toolBar({ items: [
        { value: 'func', icon: './../../../resources/base/media/icon.png', action: () => {
        } },
        { value: 'func', icon: './../../../resources/base/media/icon.png', action: () => {
        } }
      ] })
    }
  }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857602.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

三相变压器:应用和连接配置

变压器的功能和应用 变压器的类型和用途多种多样,可根据其应用、结构类型和尺寸进行分类。 一般来说,变压器的主要功能是改变交流电(AC)的电压水平,提高电压以供长距离传输或降低电压以供家庭和工业消费者使用。 它…

优先级队列模拟实现

目录 1.堆的概念 2.堆性质堆中的某个元素小于或大于他的左右孩子 3.小根堆实例 4.堆创建 4.1调整思路 4.2向下调整思路 4.3代码实现(大根堆) 5.堆的删除 6.堆的插入 7.常用接口 7.1PriorityQueue和PriorityBlockingQueue 1.堆的概念 如果有一…

常见硬件工程师面试题(二)

大家好,我是山羊君Goat。 对于硬件工程师,学习的东西主要和电路硬件相关,所以在硬件工程师的面试中,对于经验是十分看重的,像PCB设计,电路设计原理,模拟电路,数字电路等等相关的知识…

微服务(服务治理)

服务远程调用时存在的问题 注册中心原理 服务治理中的三个角色分别是什么? 服务提供者:暴露服务接口,供其它服务调用服务消费者:调用其它服务提供的接口注册中心:记录并监控微服务各实例状态,推送服务变更信…

软件工程体系概念

软件工程 软件工程是应用计算机科学、数学及 管理科学等原理开发软件的工程。它借鉴 传统工程的原则、方法,以提高质量,降 低成本为目的。 一、软件生命周期 二、软件开发模型 1.传统模型 瀑布模型、V模型、W模型、X 模型、H 模型 (1)瀑布模型 瀑布…

材料科学SCI期刊,中科院2区,影响因子4.7

一、期刊名称 Progress in Natural Science-Materials International 二、期刊简介概况 期刊类型:SCI 学科领域:材料科学 影响因子:4.7 中科院分区:2区 三、期刊征稿范围 由中国材料研究会负责的同行评议 由中国材料研究会&…

java8 将对象list中的某一个属性取出组成一个list

实体类 public class Sp {String spdm;String spmc;public Sp() {}public Sp(String spdm, String spmc) {this.spdm spdm;this.spmc spmc;}public String getSpdm() {return spdm;}public void setSpdm(String spdm) {this.spdm spdm;}public String getSpmc() {return sp…

安美数字酒店宽带运营系统——命令执行漏洞(CNVD-2021-37784)

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 安美数字酒店宽带运营系统 server_ping.php 存在远程命令执行漏洞&#…

Java-LinkedList和ArrayList的区别、Get/Add操作性能分析以及常见的遍历方式

LinkedList和ArrayList的区别、Get/Add操作性能分析以及常见的遍历方式 一、LinkedList基本特性主要方法 二、ArrayList初始化及基本操作ArrayList注意点(待完善)代码示例 三、ArrayList与LinkedList的区别四、Get/Add操作性能分析五、LinkedList遍历方式…

藏在十九页PPT里的“海合安之道”

6月6日,成立仅仅两年多的海合安集团亮相2024中国主题公园战略营销峰会,作为本届峰会最年轻的主题公园企业,备受行业关注。 海合安集团成立于2021年,为亚洲最大私募投资基金之一的安博凯投资基金(MBK Partners&#xf…

Java 编程语言:过去、现在与未来

引言 自 1995 年由 Sun Microsystems 发布以来,Java 编程语言已经走过了漫长的道路。作为一种面向对象的编程语言,Java 因其“一次编写,到处运行”的理念而广受欢迎。本文将探讨 Java 的历史、主要特点、应用领域以及未来的发展趋势。 Java…

MacBook Pro 忘记root用户密码,重置密码步骤

一、以普通用户名登录系统,并打开terminal终端, 输入:sudo bash sudo bash Password:*****(输入当前用户的密码) 成功后进入bash-3.2#的命令模式 二、在bash-3.2#命令模式下 输入:sudo passwd root sud…

春招面试面经总结篇

目录 前言一,算法篇1.1 平拍数组1.2 括号匹配1.3 打家劫舍1.4 删除最少使字符串平衡1.5 爬楼梯 二,数据结构篇2.1 二叉树2.2 链表 三,HTML篇3.1 H5新的语义标签3.2 href和src 四,CSS篇4.1 居中4.2 父元素塌陷解决4.3 外边距塌陷4.…

基于SpringBoot的实习管理系统设计与实现

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言: Java 数据库: MySQL 技术: SpringBoot框架,B/S模式 工具: MyEclipse,Tomcat 系统展示 …

dockercompose部署redis哨兵模式并集成springboot

第一步 编写compose文件 docker-compose.yml version: 3.8networks:redis-network:driver: bridgeservices:redis-master:image: redis:7.2.4container_name: redis-mastercommand: ["sh", "-c", "redis-server --protected-mode no --slave-announ…

WSL安装的Ubuntu与docker desktop集成

WSL安装的Ubuntu与docker desktop集成 最近因为项目需要,要在本地利用WSL搭建一个docker和Ubuntu的部署环境。一开始并不知道docker desktop与Ubuntu可以集成使用,所以在Ubuntu上独立安装了docker引擎,但在安装docker-compose的时候出现以下…

av1支持的CU划分

av1只有4叉划分支持递归划分 只有四叉允许递归划分,其余划分只划分到本层。最大编码单元也扩展到128x128,最小编码单元4x4。

“流处理引擎” RisingWave 的三种经典交互方式

作为流数据库,RisingWave 在大数据生态中通常扮演着流处理引擎的角色。它从各种数据源读取数据,并将其写入不同的目的地。在此过程中,RisingWave 清洗、转换和聚合数据,最终得出计算的结果。 RisingWave 为用户提供了丰富的交互和…

flask-socket的实践

1.长连接和短连接的由来 1)TCP在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立通过三次握手,释放则需要四次握手…

哪种无线麦克风比较好?一文读懂什么品牌的无线麦克风比较好!

​在这个信息爆炸的时代,网络直播和短视频成为了人们获取信息、娱乐和社交的重要方式。作为自媒体人,拥有一款优秀的领夹式无线麦克风是必不可少的。它不仅能够帮助你在各种环境中保持清晰的声音,还能提升你的作品质量和专业度。然而&#xf…