精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

運動記錄Demo的列表界面介紹

系統 OpenHarmony
這是一個運動記錄的應用,主要用于管理健康記錄運動。可以添加運動信息,包括運動名稱、運動時長,并自動計算消耗的卡路里,在記錄頁面可以查看所添加的運動記錄。

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

前言

在參加了"HarmonyOS ArkUI入門訓練營——健康生活實戰"后,了解并學習了聲明式UI開發框架及組件用法,本文是對筆者結營作品中的列表界面作一個小分享,涉及到List組件和Tabs組件的使用。

概述

這是一個運動記錄的應用,主要用于管理健康記錄運動。可以添加運動信息,包括運動名稱、運動時長,并自動計算消耗的卡路里,在記錄頁面可以查看所添加的運動記錄。其界面效果圖如下:

#打卡不停更#【木棉花】:運動記錄Demo的列表界面介紹-開源基礎軟件社區

正文

一、新建運動數據類

在MainAbility目錄下新建文件夾model,在model文件夾中新建兩個ets文件,分別命名為SportsData,SportsDataModel,如圖:

#打卡不停更#【木棉花】:運動記錄Demo的列表界面介紹-開源基礎軟件社區


在 SportsData 中添加代碼:

export enum Category {
Walking = '走路',
Running = '跑步',
Swimming = '游泳',
Riding = '騎行',
Ball = '打球',
Other = '其他'
}
let NextId = 0;
export class SportsData {
id: string;
name: string;
image: Resource;
value: number;
category: Category;
constructor(name: string, category: Category, image: Resource,value:number) {
this.id = `${NextId++}`;
this.name = name;
this.image = image;
this.category = category;
this.value = value;
}
}
export class RecordData {
name: string;
image: Resource;
time:string;
sum:number;
constructor(name: string, image: Resource,time:string,sum:number) {
this.name = name;
this.image = image;
this.time = time
this.sum = sum;
}
}

在 SportsDataModel 中添加代碼:

import {Category,SportsData} from './SportsData'
const SportsComposition:any[]=[
{'name':'散步','category':Category.Walking,'image':$r('app.media.walk_slow'),'value':81},
{'name':'快走(5km/h)','category':Category.Walking,'image':$r('app.media.walk_fast'),'value':188},
{'name':'跑步(慢)','category':Category.Running,'image':$r('app.media.run'),'value':344},
{'name':'跑步(快)','category':Category.Running,'image':$r('app.media.run_fast'),'value':475},
{'name':'遛狗','category':Category.Walking,'image':$r('app.media.walk_dog'),'value':125},
{'name':'游泳','category':Category.Swimming,'image':$r('app.media.swim'),'value':344},
{'name':'乒乓球','category':Category.Ball,'image':$r('app.media.pingpong'),'value':188},
{'name':'棒球','category':Category.Ball,'image':$r('app.media.baseball'),'value':188},
{'name':'轉呼啦圈','category':Category.Other,'image':$r('app.media.hula'),'value':156},
{'name':'跳繩','category':Category.Other,'image':$r('app.media.skip_rope'),'value':363},
{'name':'騎自行車(<16km/h)','category':Category.Riding,'image':$r('app.media.ride'),'value':188},
{'name':'騎自行車(16-19km/h)','category':Category.Riding,'image':$r('app.media.ride'),'value':363},
]
export function initializeOnStartup(): Array<SportsData> {
let SportsDataArray: Array<SportsData> = []
SportsComposition.forEach(item => {
SportsDataArray.push(new SportsData(item.name,item.category,item.image,item.value));
})
return SportsDataArray;
}

二、List組件的使用

1、定義子組件的布局

為了方便預覽,可以用 @Preview 裝飾,然后打開預覽器,點擊圖示位置顯示。

#打卡不停更#【木棉花】:運動記錄Demo的列表界面介紹-開源基礎軟件社區

為了方便調試,可以先把數據用靜態數據代替,代碼如下。

@Preview
@Component
export struct SportsGridItem {
private sportsItem: SportsData = {'id':'8','name':'棒球','image':$r('app.media.baseball'),'value':188,'category':Category.Ball}
private controller: CustomDialogController
aboutToAppear() {
this.controller = new CustomDialogController({
builder: Record({ sportsItem: this.sportsItem }),
alignment: DialogAlignment.Center
})
}
@Builder sportsDetail(value: number) {
Row({ space: 10 }) {
Text(value.toString()).fontColor('#E14843').fontSize(16)
Text('千卡/60分鐘').fontColor(Color.Gray).fontSize(16)
}
}
build() {
Row({ space: 10 }) {
Image(this.sportsItem.image)
.objectFit(ImageFit.Contain)
.height(60)
.aspectRatio(1)
.borderRadius(12)
.margin(5)
.backgroundColor(Color.White)
Column({ space: 6 }) {
Text(this.sportsItem.name).fontSize(19).fontWeight(500)
this.sportsDetail(this.sportsItem.value)
}.alignItems(HorizontalAlign.Start)
}
.margin({ left: 10, top: 20 })
.onClick(() => {
this.controller.open()
})
}
}

2、列表組件的渲染

Scroll是可滾動容器組件,傳入運動類的數組,用ForEach循環遍歷渲染,傳參給子組件SportsGridItem。

@Component
export struct SportsGrid {
private sportsItems: SportsData[]
build() {
Scroll() {
List({ space: 20 }) {
ForEach(this.sportsItems, (item: SportsData) => {
ListItem() {
SportsGridItem({ sportsItem: item })
}
}, (item: SportsData) => item.id.toString())
}.height('100%')
}
.scrollBar(BarState.Off)
}
}

到此步實現的是在一個列表里把所有子項列出來,但想要的效果是按類別將子項分類來顯示,那就繼續看下去吧~

三、Tabs組件的使用

為了讓頁簽更好看,從文檔中可以看到TabContent的TabBar屬性可選CustomBuilder類型,進一步可查看該自定義的組件屬性方法,需要用 @Builder 裝飾。

#打卡不停更#【木棉花】:運動記錄Demo的列表界面介紹-開源基礎軟件社區

#打卡不停更#【木棉花】:運動記錄Demo的列表界面介紹-開源基礎軟件社區

看完文檔后,那就用起來~,代碼如下:

@Builder tabBuilder(index: number, name: string) {
Flex({ justifyContent: FlexAlign.Center, direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {
Text(name).fontSize(20).fontColor(Color.White)
}
.borderRadius(15)
.width(90)
.height(30)
.backgroundColor(this.currentIndex === index ? '#3ECF69' : '#bfbfbf')
}

為了實現按類別進行列表展示,即要對數據類的Category進行檢索分類來渲染。通過學習直播課程,知道有filter這個方法,可以對每個子項遍歷使用。

#打卡不停更#【木棉花】:運動記錄Demo的列表界面介紹-開源基礎軟件社區

于是總體代碼如下:

@Component
struct SportsCategory {
private sportsItems: SportsData[]
@State currentIndex: number = 0
@Builder tabBuilder(index: number, name: string) {
Flex({ justifyContent: FlexAlign.Center, direction: FlexDirection.Column, alignItems: ItemAlign.Center }) {
Text(name).fontSize(20).fontColor(Color.White)
}
.borderRadius(15)
.width(90)
.height(30)
.backgroundColor(this.currentIndex === index ? '#3ECF69' : '#bfbfbf')
}
build() {
Stack() {
Tabs({ barPosition: BarPosition.Start }) {
TabContent() {
SportsGrid({ sportsItems: this.sportsItems.filter(item => (item.category === Category.Walking)) })
}.tabBar(this.tabBuilder(0, '走路'))
TabContent() {
SportsGrid({ sportsItems: this.sportsItems.filter(item => (item.category === Category.Running)) })
}.tabBar(this.tabBuilder(1, '跑步'))
TabContent() {
SportsGrid({ sportsItems: this.sportsItems.filter(item => (item.category === Category.Swimming)) })
}.tabBar(this.tabBuilder(2, '游泳'))
TabContent() {
SportsGrid({ sportsItems: this.sportsItems.filter(item => (item.category === Category.Riding)) })
}.tabBar(this.tabBuilder(3, '騎行'))
TabContent() {
SportsGrid({ sportsItems: this.sportsItems.filter(item => (item.category === Category.Ball)) })
}.tabBar(this.tabBuilder(4, '打球'))
TabContent() {
SportsGrid({ sportsItems: this.sportsItems.filter(item => (item.category === Category.Other)) })
}.tabBar(this.tabBuilder(5, '其他'))
}
.vertical(true)
.barHeight('70%')
.barWidth(100)
.onChange((index: number) => {
this.currentIndex = index
})
}
}
}

最后,在底部的頁簽組件中添加使用、以及運動類和記錄類的數據使用、搜索界面的實現等內容,預告在下一篇文章啦,歡迎評論區交流~

結語

以上就是本次的小分享啦!

??想了解更多關于開源的內容,請訪問:??

??51CTO 開源基礎軟件社區??

??https://ost.51cto.com??。

責任編輯:jianghua 來源: 51CTO開源基礎軟件社區
相關推薦

2022-10-19 15:12:05

ArkUI鴻蒙

2022-10-17 14:39:12

自定義彈窗組件鴻蒙

2010-02-07 14:11:46

2010-03-09 14:23:37

Python列表內涵

2010-03-16 20:27:52

Python模塊

2011-07-28 17:40:04

MySQLMySQL Workb

2015-05-26 15:20:57

創業邦

2010-01-04 14:33:53

Command對象

2009-12-25 14:30:47

ADO記錄

2010-06-21 17:10:02

Linux Arp命令

2010-03-18 09:52:34

python列表學習整

2011-03-29 09:56:35

Cacti界面

2010-03-03 17:50:45

Android圖形界面

2009-05-26 15:22:14

Linux圖形備份

2021-04-27 15:38:10

GoogleChrome歷史記錄

2010-09-07 11:16:14

SQL語句

2010-03-09 16:26:08

Python列表

2022-06-14 15:13:22

Echarts柱狀圖

2011-06-21 14:01:07

QT 界面庫 Embedded

2009-12-28 17:48:01

WPF界面布局
點贊
收藏

51CTO技術棧公眾號

波多野结衣亚洲一区二区| 久久久久久久久久网| 中文字幕永久免费视频| 久久精品久久久| 亚洲成人三级在线| 99草草国产熟女视频在线| 精品国产丝袜高跟鞋| 成人精品视频一区二区三区尤物| 欧美一级黑人aaaaaaa做受| 人与嘼交av免费| h视频久久久| 欧洲亚洲精品在线| bt天堂新版中文在线地址| 黄网站在线观看| 国产a级毛片一区| 热门国产精品亚洲第一区在线| 三上悠亚在线观看视频| 亚洲a级精品| 日韩欧美国产1| 热久久精品免费视频| 国产精品偷拍| 国产精品福利一区| 欧美动漫一区二区| 亚洲第九十九页| 日本va欧美va欧美va精品| 欧美激情精品在线| 日韩av毛片在线观看| 亚洲精品进入| 精品久久久久一区| 日韩欧美国产片| 性感女国产在线| 夜夜嗨av一区二区三区中文字幕| 亚洲国产精品综合| 午夜国产在线视频| 成人网页在线观看| 91日本在线视频| а中文在线天堂| 亚洲一区二区三区高清| 欧美乱妇高清无乱码| 日本黄区免费视频观看| 欧美日韩在线二区| 精品国产成人在线影院| 中文字幕一区二区三区人妻在线视频| 亚洲天堂1区| 色噜噜久久综合| www国产精品内射老熟女| 色婷婷av在线| 亚洲黄色录像片| 懂色av一区二区三区四区五区| 第一页在线观看| 久久理论电影网| 欧美裸体网站| 黄色影院在线播放| 久久这里只精品最新地址| 国产一区免费在线| 日韩一级片免费看| av中文字幕亚洲| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 色悠悠久久久久| 成年人免费视频播放| 成人在线免费视频观看| 在线观看免费高清视频97| av男人的天堂av| 欧美日韩xxxx| 最近2019中文字幕一页二页| 人成免费在线视频| jizz性欧美23| 亚洲国产成人av在线| 中文文字幕文字幕高清| 亚洲v天堂v手机在线| 国产亚洲一区二区三区在线观看| 日韩av色在线| 中文字幕av久久爽av| 好看不卡的中文字幕| 国内精品久久久久久中文字幕| 一本一道久久a久久精品综合 | 中文字幕精品网| 国产jjizz一区二区三区视频| 成人在线免费观看黄色| 午夜久久久影院| 国产午夜伦鲁鲁| 日韩不卡免费高清视频| 欧美日韩在线播放一区| www激情五月| 国产精品zjzjzj在线观看| 日韩精品黄色网| 纪美影视在线观看电视版使用方法| 色婷婷色综合| 欧美激情在线播放| 日韩手机在线视频| 精品一区二区三区不卡| 国产精品成人一区二区三区| 男人的天堂av高清在线| 亚洲视频一区二区在线| 免费看欧美一级片| 欧美va在线| 欧美xxxxxxxx| 中文字幕在线观看免费高清| 久久久人成影片免费观看| 欧美极品少妇与黑人| 99久久久无码国产精品免费蜜柚| 国产一区二区调教| 久久偷看各类wc女厕嘘嘘偷窃 | 欧美精品少妇videofree| 国产区在线观看视频| 免费精品视频最新在线| 超碰97人人在线| 国产精品一区在线看| 亚洲曰韩产成在线| 国产又黄又猛又粗又爽的视频| 天堂精品久久久久| 亚洲图片在区色| 日本在线免费观看| 韩国欧美国产一区| 欧美伦理一区二区| av免费在线视| 69堂精品视频| 日韩av在线看免费观看| 激情亚洲成人| 91精品视频免费观看| 头脑特工队2在线播放| 亚洲精品视频在线| 男女视频在线看| 你微笑时很美电视剧整集高清不卡| 久久99热精品这里久久精品| 中文字幕欧美在线观看| 91蜜桃在线免费视频| 日本黄大片在线观看| 欧美一级网址| 在线日韩精品视频| 欧产日产国产69| 91丨porny丨户外露出| 大地资源网在线观看免费官网| 国产美女久久| 中文字幕亚洲一区二区三区| 国产又粗又猛又爽又| 91麻豆国产福利在线观看| 高清欧美精品xxxxx| 香蕉免费一区二区三区在线观看| 久久久久www| 97超碰国产在线| 中国色在线观看另类| 日韩av一二三四| 九九久久电影| 秋霞av国产精品一区| 婷婷久久久久久| 亚洲高清三级视频| youjizz.com日本| 欧美淫片网站| 超碰在线97av| 好看的中文字幕在线播放| 日韩欧美视频在线| 三级影片在线看| 国产精品99久久不卡二区| 日本三日本三级少妇三级66| 日韩有码欧美| 久热精品视频在线观看| 精品国产亚洲av麻豆| 一级精品视频在线观看宜春院| 少妇极品熟妇人妻无码| 激情综合在线| 久久综合狠狠综合久久综青草| 国产伦精品一区二区三区视频金莲| 亚洲精品美女久久久久| 欧美成人一区二区三区四区| 国产精品情趣视频| 中文字幕一区久久| 亚洲欧美文学| 国产经典一区二区三区| av蜜臀在线| 国产网站欧美日韩免费精品在线观看| 国产一级片毛片| 国产女人水真多18毛片18精品视频| jizzzz日本| 亚洲精品久久久| 国产91aaa| 中文不卡1区2区3区| 中文欧美日本在线资源| 国产乱人乱偷精品视频a人人澡| 亚洲免费大片在线观看| xxxx黄色片| 人人狠狠综合久久亚洲| 91传媒免费视频| 亚洲动漫精品| 国产精品自产拍在线观看中文| 成人国产免费电影| 日韩av在线直播| 中文字幕视频二区| 亚洲精品国产一区二区精华液 | 精品爽片免费看久久| 中文字幕一区二区人妻视频| 亚洲品质自拍视频网站| 国产二级一片内射视频播放 | 欧美孕妇与黑人孕交| 天堂中文а√在线| 亚洲成人av中文字幕| 最近中文字幕在线观看| 亚洲图片一区二区| 国产一区二区三区精品在线| 成人自拍视频在线| 三级a三级三级三级a十八发禁止| 欧美视频一区| 亚洲乱码国产乱码精品天美传媒| 亚洲专区**| 国产精品久久久久av| 97天天综合网| 久久躁日日躁aaaaxxxx| 亚洲av成人精品毛片| 欧美一区2区视频在线观看| 日本视频在线观看免费| 一区二区三区在线免费| 欧美激情 一区| 99r国产精品| 古装做爰无遮挡三级聊斋艳谭| 老司机午夜精品视频| 91.com在线| 青青草成人影院| 蜜桃传媒视频麻豆第一区免费观看| 狂野欧美xxxx韩国少妇| 国产精品视频男人的天堂| 欧美极品videos大乳护士| 久久最新资源网| 五月香视频在线观看| 亚洲色图第一页| 午夜视频在线播放| 精品国产髙清在线看国产毛片| 国产精品一二三四五区| 欧美日韩三级一区| 丰满少妇xoxoxo视频| 精品国产电影一区| 国产在线欧美在线| 亚洲伦在线观看| 日本精品人妻无码77777| 国产精品久久午夜| 国产精品久久久视频| 久久精品人人做| 精品无码一区二区三区| 久久综合999| 久久久久久久久久久久久久久| av在线不卡观看免费观看| 妖精视频一区二区| 成人深夜在线观看| 四虎永久免费观看| 丰满白嫩尤物一区二区| 国产调教打屁股xxxx网站| 国产精品一区在线| 18深夜在线观看免费视频| 韩国av一区二区| 亚洲精品在线视频播放| 蜜桃91丨九色丨蝌蚪91桃色| 激情视频免费网站| 日韩精品免费专区| 蜜臀视频一区二区三区| 日韩精品免费视频人成| 黄色aaa级片| 经典三级在线一区| 久久精品一卡二卡| 国产乱码一区二区三区| 91精产国品一二三| 不卡的av在线| 北岛玲一区二区| 国产婷婷色一区二区三区四区| 亚洲av成人无码久久精品 | 亚洲国产精品久久久久久| 日本黄色一区二区三区| 日韩毛片在线观看| 男男激情在线| 中国人与牲禽动交精品| 免费观看在线黄色网| 欧美高清视频在线播放| 182在线视频观看| 欧美在线性视频| 全球最大av网站久久| 成人免费网站在线看| 99久久婷婷国产综合精品青牛牛 | 亚洲午夜视频在线| 日韩精品国产一区二区| 色欧美片视频在线观看在线视频| 在线观看视频二区| 日韩欧美你懂的| 午夜在线视频免费| 色偷偷噜噜噜亚洲男人的天堂 | 欧美在线日韩在线| 国产成人免费| 国产精品一区二区三区四区五区| 一本色道久久综合狠狠躁的番外| 一区不卡视频| 亚洲二区精品| 亚洲欧美国产日韩综合| 福利电影一区二区| 白白色免费视频| 亚洲综合丝袜美腿| 18国产免费视频| 精品日韩99亚洲| 岛国视频免费在线观看| 欧美成年人网站| 超碰一区二区| 999视频在线免费观看| 久久不见久久见中文字幕免费 | 日本欧美在线视频免费观看| 国产+人+亚洲| 日韩午夜视频在线| 欧美成熟毛茸茸复古| 欧美在线亚洲综合一区| 国产熟女高潮视频| 国产 日韩 欧美大片| 精品在线观看一区| 福利视频一区二区| 亚洲国产精品suv| 色阁综合伊人av| av高清不卡| 国产一区二区在线网站 | 国产日产欧美一区二区视频| 久久久久久国产精品视频| 欧美性videosxxxxx| 日韩中文字幕免费观看| 久久精品亚洲热| 日本精品裸体写真集在线观看| 国产伦精品一区二区三区照片91 | 国产精品久久久久久久久动漫| 黄色在线观看国产| 精品少妇一区二区三区日产乱码| 在线a人片免费观看视频| 热re99久久精品国产66热| 亚洲1区在线| 在线观看污视频| 国内精品在线播放| 国产馆在线观看| 在线观看亚洲专区| 日韩a在线看| 26uuu另类亚洲欧美日本一 | 日韩在线电影一区| 久久大逼视频| 中文在线一区二区三区| 舔着乳尖日韩一区| 国产18精品乱码免费看| 久操成人在线视频| 亚洲精选av| www.国产二区| 国产传媒一区在线| 久久久久久久久毛片| 欧美一级在线免费| 91cn在线观看| 欧美日韩卡一卡二| 天天av综合网| 97超碰蝌蚪网人人做人人爽| 精品福利网址导航| 国产二区视频在线| 99在线精品视频| 青青国产在线观看| 亚洲剧情一区二区| 大胆人体一区| 欧美一区少妇| 久久国产三级精品| 夫妻性生活毛片| 在线播放中文字幕一区| 国产激情在线| 成人看片视频| 亚洲精品婷婷| 亚洲最大成人网站| 欧美日韩在线播放三区四区| 成人免费在线| 国产亚洲自拍偷拍| 蜜桃视频一区| 激情五月激情综合| 日韩欧美国产麻豆| 两个人看的在线视频www| 欧美一级二级三级| 久久成人久久鬼色| 久久久国产成人| 亚洲精品成a人在线观看| 韩日成人影院| 中文字幕在线亚洲三区| 成人在线视频一区| www.色国产| 另类少妇人与禽zozz0性伦| 国产精品乱战久久久| 农村妇女精品一二区| 国产精品毛片a∨一区二区三区| 精品国产乱码久久久久久蜜臀网站| 国自产精品手机在线观看视频| 久久91精品| 色综合五月婷婷| 大伊人狠狠躁夜夜躁av一区| 成人免费黄色网页| 国产精品加勒比| 日韩av中文在线观看| 永久免费看黄网站| 亚洲码在线观看| 国产剧情一区二区在线观看| 亚洲熟妇国产熟妇肥婆| 亚洲欧洲日韩av| 日韩av视屏| 91手机在线观看| 日本午夜精品视频在线观看| 久草视频免费在线| 中文字幕免费精品一区高清| 好吊妞国产欧美日韩免费观看网站| 欧美日韩在线观看不卡| 亚洲第一福利一区|