【08】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Scroll容器与Tabs组件

序言:

本文详细讲解了关于我们在页面上经常看到的可滚动页面和导航栏在鸿蒙开发中如何用Scroll和Tabs组件实现,介绍了Scroll和Tabs的基本用法与属性。

笔者也是跟着B站黑马的课程一步步学习,学习的过程中添加部分自己的想法整理为笔记分享出来,如有代码错误或笔误,欢迎指正。

B站黑马的课程链接:鸿蒙课程介绍_哔哩哔哩_bilibili

往期笔记:

【01】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs基础语法与界面开发基础

【02】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-界面进阶与布局排布(附QQ登陆、得物、京东登陆综合案例+代码)

【03】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-更多布局(弹性/层叠)方式与界面开发综合(附飞狗卡片+B站卡片案例+实战开发支付宝界面+代码)

【04】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-ArkTs进阶运算符+状态管理(附综合案例美团购物车)

【05】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-条件渲染+if/switch判断与for/while循环(附计数器、京东加购案例)
【06】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-综合案例·生肖抽奖卡具体实现(类似支付宝集五福)
【07】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Swiper轮播组件与样式&结构重用

目录

一.滚动容器Scroll

1.Scroll-核心用法

2.Scroll-常见属性

3.Scroll-控制器

4.Scroll-事件

5.Scroll-京东案例

二.Tabs组件

1.Tabs-基本使用

2.Tabs-自定义TabBar-基础结构

3.Tabs-自定义TabBar-高亮切换


一.滚动容器Scroll

简介:当子组件的布局尺寸超出Scroll的尺寸时,内容可以滚动

1.Scroll-核心用法

1)用法说明:

①Scroll设置尺寸

②设置溢出的子组件(只支持一个子组件)

③滚动方向(支持横向和纵向,默认纵向)

2)代码示意:

  build() {Scroll(){//只支持一个子组件Column(){//内容放在内部//尺寸超过Scroll即可滚动}}.width('100%').height(200).scrollable(ScrollDirection.xxx)//设置滚动方向}
//.scrollable(ScrollDirection.Vertical) 纵向
//.scrollable(ScrollDirection.Horizontal)横向

2.Scroll-常见属性

1)常用参数:

名称

参数类型

描述

scrollBar

BarState

设置滚动条状态

scrollBarColor

string|number|Color

设置滚动条颜色

scrollBarWidth

string|number

设置滚动条宽度

edgeEffect

value:EdgeEffect

设置边缘滑动效果

EdgeEffect.None 无

EdgeEffect.Spring 弹簧

EdgeEffect.Fade 阴影

scrollable

ScrollDirection

设置滚动方向

ScrollDirection.Vertical) 纵向

ScrollDirection.Horizontal)横向

2)代码示意:

  build() {Column() {Scroll() {Column() {ForEach(Array.from({ length: 10 }), (item: string, index) => {Text('测试文本').width('100%').height(100).backgroundColor(Color.Grey).margin(20)})}.padding(10).width('100%')}.width('100%').height(400).scrollable(ScrollDirection.Vertical) //设置滚动方向.scrollBar(BarState.On)  //On令滚动条恒存在 Off恒隐藏 Auto滑动显示.scrollBarColor(Color.Blue)  //滚动条颜色.scrollBarWidth(5)  //滚动条宽度.edgeEffect(EdgeEffect.Spring)  //滚动条弹簧效果}}

3.Scroll-控制器

1)核心步骤:

①实例化Scroll的控制器

②绑定给Scroll组件

③控制器的方法控制滚动,控制其属性获取滚动距离

2)代码示意:

struct Index {//1.创建Scroller对象(实例化)myscroller:Scroller = new Scroller()build() {Column({ space: 10 }) {Scroll(this.myscroller) {Column() {ForEach(Array.from({ length: 10 }), (irem: string, index) => {Text('测试文本').width('100%').height(100).backgroundColor(Color.Grey).margin(20)})}.padding(10).width('100%')}.width('100%').height(400).scrollable(ScrollDirection.Vertical) //设置滚动方向.scrollBar(BarState.On)  //On令滚动条恒存在 Off恒隐藏 Auto滑动显示.scrollBarColor(Color.Blue)  //滚动条颜色.scrollBarWidth(5)  //滚动条宽度.edgeEffect(EdgeEffect.Spring)  //滚动条弹簧效果Button('控制滚动条位置').margin(20).onClick(()=>{this.myscroller.scrollEdge(Edge.Top) //控制滚动条到顶部})Button('获取已经滚动的距离').onClick(()=>{const y = this.myscroller.currentOffset().yOffsetAlertDialog.show({message:`'y':${y}`})})}}
}

4.Scroll-事件

简介:Scroll组件提供了一些事件,让开发者可以在适当的时候添加逻辑。

   Scroll(){//内容略}.onScroll((x,y))=>{//滚动时 一直触发//可以结合 scroller的currentOffset方案,获取滚动距离}

1)代码示意:

Scroll(this.myscroller) {Column() {ForEach(Array.from({ length: 10 }), (irem: string, index) => {Text('测试文本').width('100%').height(100).backgroundColor(Color.Grey).margin(20)})}.padding(10).width('100%')}.width('100%').height(400).scrollable(ScrollDirection.Vertical) //设置滚动方向.scrollBar(BarState.On)  //On令滚动条恒存在 Off恒隐藏 Auto滑动显示.scrollBarColor(Color.Blue)  //滚动条颜色.scrollBarWidth(5)  //滚动条宽度.edgeEffect(EdgeEffect.Spring)  //滚动条弹簧效果.onScroll((x,y)=>{console.log('已经滑动的距离:',this.myscroller.currentOffset().yOffset)})

5.Scroll-京东案例

1)代码示意:

@Entry
@Component
struct Index {//1.创建Scroll实例对象myscroller:Scroller = new Scroller()@State yOffset:number = 0 //实时保存y轴距离build() {Column() {Stack({ alignContent: Alignment.BottomEnd }) {// 顶部滚动区域//2.和scroller容器绑定Scroll(this.myscroller) {Column() {Image($r('app.media.ic_jd_scroll_01'))Image($r('app.media.ic_jd_scroll_02'))Image($r('app.media.ic_jd_scroll_03'))}}.scrollBar(BarState.Off).width('100%').backgroundColor(Color.Orange).onScroll(()=>{this.yOffset=this.myscroller.currentOffset().yOffset})//有时显示有时隐藏可以用条件渲染if(this.yOffset>400)Image($r('app.media.ic_jd_rocket')).width(40).backgroundColor(Color.White).borderRadius(20).padding(5)// .margin({right:20,bottom:20}).offset({ x: -20, y: -20 }).onClick(()=>{this.myscroller.scrollEdge(Edge.Top)})}.layoutWeight(1)// 底部 tabbar 图片(后面会学)Image($r('app.media.ic_jd_tab')).width('100%')}}
}

二.Tabs组件

当页面内容较多时,可以通过Tabs组件进行分类展示

Tab里面还可以有Tab

1.Tabs-基本使用

1)基本用法:

   Tabs(){TabContent(){Text('首页内容') //有且只能有一个子组件,如果内容比较复杂,可以用Column这种}.tabBar('首页')  //配置导航TabContent(){Text('推荐内容') //有且只能有一个子组件,如果内容比较复杂,可以用Column这种}.tabBar('推荐')  //配置导航TabContent(){Text('发现内容') //有且只能有一个子组件,如果内容比较复杂,可以用Column这种}.tabBar('发现')  //配置导航TabContent(){Text('我的') //有且只能有一个子组件,如果内容比较复杂,可以用Column这种}.tabBar('我的')  //配置导航}

2)常用属性

名称

作用

barPosition

调整位置 开头 或 结尾 参数

vertical

调整导航 水平 或 垂直

scrollable

调整是否手势滑动 切换

animationDuration

点击滑动动画时间

①写法位置

3)滚动导航栏

如果导航栏的内容较多,屏幕无法容纳时,可以将它设置为滚动

可以通过Tabs组件的barMode属性即可调整固定导航栏或滚动导航栏

①代码示意:

  tieles:string[]=['首页','关注','热门','军事','体育','八卦','数码','财经','美食','旅行',]//生成十个面板+十个小导航Tabs(){ForEach(this.tieles,(item:string,index)=>{TabContent(){Text('我是内容')}.tabBar(`${item}内容`)})}.barMode(BarMode.Scrollable)

2.Tabs-自定义TabBar-基础结构

TabBar在底部,一般会显示图形和文字,甚至有一些特殊logo

1)代码示意:

@Entry
@Component
struct Index {@BuildermyBuilder(title:string,img:ResourceStr){Column(){Image(img).width(30)Text(title)}}build() {Tabs({barPosition:BarPosition.End}){TabContent(){Text('购物车内容')}.tabBar(this.myBuilder('购物车',$r('app.media.ic_tabbar_icon_2')))TabContent(){Text('我的内容')}.tabBar(this.myBuilder('我的',$r('app.media.ic_tabbar_icon_3')))}}
}

3.Tabs-自定义TabBar-高亮切换

1)核心思路:

①监听切换事件→得到索引值,记录高亮的索引

②给每个tabber起一个标记,0,1,2

③在taber内部比较标记==记录的索引?高亮:不高亮

名称

功能描述

onChange(event:(index:number)=>void)

Tab页签切换后触发的事件。

-index:当前显示的index索引,索引从0开始计算。

滑动切换、点击切换 均会触发

onTabbarClick(event:(index:number)=>void)10+

Tab页签点击后触发的事件。

-index:被点击的index索引,索引从0开始计算。

2)代码示意:

@Entry
@Component
struct Index {//准备状态,存储激活的索引@State selectIndex:number=0@BuildermyBuilder(itemIndex:number,title:string,img:ResourceStr,selImg:ResourceStr){//如果激活的是自己,图文/文本,都需要调整样式->需要区分不同的 tabarColumn(){Image(itemIndex==this.selectIndex?selImg:img).width(30)Text(title).fontColor(itemIndex==this.selectIndex?Color.Red:Color.Black)}}build() {Tabs({barPosition:BarPosition.End}){TabContent(){Text('购物车内容')}.tabBar(this.myBuilder(0,'购物车',$r('app.media.ic_tabbar_icon_2'),$r('app.media.ic_tabbar_icon_2_selected')))TabContent(){Text('我的内容')}.tabBar(this.myBuilder(1,'我的',$r('app.media.ic_tabbar_icon_3'),$r('app.media.ic_tabbar_icon_3_selected')))}.onChange((index:number)=>{/*console.log('激活的索引',index)*/this.selectIndex = index})}}

感谢观看

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【漏洞复现】泛微OA E-Office do_excel.php 任意文件写入漏洞

》》》产品描述《《《 泛微0-0fice是一款标准化的协同 OA办公软件,泛微协同办公产品系列成员之一,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 》》…

深度学习:基于MindSpore实现CycleGAN壁画修复

关于CycleGAN的基础知识可参考: 深度学习:CycleGAN图像风格迁移转换-CSDN博客 以及MindSpore官方的教学视频: CycleGAN图像风格迁移转换_哔哩哔哩_bilibili 本案例将基于CycleGAN实现破损草图到线稿图的转换 数据集 本案例使用的数据集里…

【含文档】基于Springboot+Vue的护肤品推荐系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

企望制造ERP系统存在RCE漏洞

漏洞描述 企望制造纸箱业erp系统由深知纸箱行业特点和业务流程的多位IT专家打造,具有国际先进的管理方式,将现代化的管理方式融入erp软件中,让企业分分钟就拥有科学的管理经验。erp的功能包括成本核算、报价定价、订单下达、生产下单、现场管…

五子棋双人对战项目(3)——匹配模块

目录 一、分析需求 二、约定前后端交互接口 匹配请求: 匹配响应: 三、实现游戏大厅页面(前端代码) game_hall.html: common.css: game_hall.css: 四、实现后端代码 WebSocketConfig …

vue3 环境配置vue-i8n国际化

一.依赖和插件的安装 主要是vue-i18n和 vscode的自动化插件i18n Ally https://vue-i18n.intlify.dev/ npm install vue-i18n10 pnpm add vue-i18n10 yarn add vue-i18n10 vscode在应用商城中搜索i18n Ally:如图 二.实操 安装完以后在对应项目中的跟package.jso…

计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Charles+socksdroid手机抓包配置

证书配置 保存一个证书 使用abd将证书推送到手机 找手机的加密与凭据 点击从存储设备安装 选择刚刚导入手机的证书 证书按照成功 手机安装socksdroid 端口对应 ip对应 开启 点击allow 成功手机抓包 将用户证书移动到系统证书 系统证书路径:/etc/security/cacerts…

【springboot】整合LoadBalancer

目录 问题产生背景解决方案:实现LoadBalancer1. 添加依赖2. 配置文件3. 使用LoadBalancer4. 使用 RestTemplate 进行服务调用5. 测试 问题产生背景 以下是一个购物车项目,通过调用外部接口获取商品信息,并添加到购物车中,这段代码…

【Android 14源码分析】WMS-窗口显示-第二步:relayoutWindow -1

忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

【JAVA开源】基于Vue和SpringBoot的宠物咖啡馆平台

本文项目编号 T 064 ,文末自助获取源码 \color{red}{T064,文末自助获取源码} T064,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

使用CSS实现酷炫加载

使用CSS实现酷炫加载 效果展示 整体页面布局 <div class"container"></div>使用JavaScript添加loading加载动画的元素 document.addEventListener("DOMContentLoaded", () > {let container document.querySelector(".container&q…

初识Linux · 自主Shell编写

目录 前言&#xff1a; 1 命令行解释器部分 2 获取用户命令行参数 3 命令行参数进行分割 4 执行命令 5 判断命令是否为内建命令 前言&#xff1a; 本文介绍是自主Shell编写&#xff0c;对于shell&#xff0c;即外壳解释程序&#xff0c;我们目前接触到的命令行解释器&am…

数据提取之JSON与JsonPATH

第一章 json 一、json简介 json简单说就是javascript中的对象和数组&#xff0c;所以这两种结构就是对象和数组两种结构&#xff0c;通过这两种结构可以表示各种复杂的结构 > 1. 对象&#xff1a;对象在js中表示为{ }括起来的内容&#xff0c;数据结构为 { key&#xff1…

区块链+Web3学习笔记(METAMASHK、密码学知识)

学习资料来源于B站&#xff1a; 17小时最全Web3教程&#xff1a;ERC20&#xff0c;NFT&#xff0c;Hardhat&#xff0c;CCIP跨链_哔哩哔哩_bilibili 该课程提供的Github代码地址&#xff0c;相关资料详见README.md&#xff1a; Web3_tutorial_Chinese/README.md at main sm…

银河麒麟系统内存清理

银河麒麟系统内存清理 1、操作步骤2、注意事项 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 当银河麒麟系统运行较长时间&#xff0c;内存中的缓存可能会积累过多&#xff0c;影响系统性能。此时&#xff0c;你可以通过简单的命令来清理这…

JS | 如何解决ajax无法后退的问题?

Ajax请求通常不支持浏览器的后退按钮&#xff0c;因为它们是异步的&#xff0c;不会导致页面重新加载(刷新)。但如果你想要用户能够通过浏览器的后退按钮回到之前的页面状态&#xff0c;你可以通过几种方法来解决这个问题&#xff1a; 1、使用pushState和replaceState方法 hi…

【Android】数据存储

本章介绍Android五种主要存储方式的用法&#xff0c;包括共享参数SharedPreferences、数据库SQLite、SD卡文件、App的全局内存&#xff0c;另外介绍重要组件之一的应用Application的基本概念与常见用法&#xff0c;以及四大组件之一的内容提供器ContentProvider的基本概念与常见…

五.海量数据实时分析-FlinkCDC+DorisConnector实现数据的全量增量同步

前言 前面四篇文字都在学习Doris的理论知识&#xff0c;也是比较枯燥&#xff0c;当然Doris的理论知识还很多&#xff0c;我们后面慢慢学&#xff0c;本篇文章我们尝试使用SpringBoot来整合Doris完成基本的CRUD。 由于 Doris 高度兼容 Mysql 协议&#xff0c;两者在 SQL 语法…

Redis数据库与GO(二):list,set

一、list&#xff08;列表&#xff09; list&#xff08;列表&#xff09;是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。List本质是个链表&#xff0c; list是一个双向链表&#xff0c;其元素是有序的&#xff0c;元…