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

OpenHarmony - 基于ArkUI框架實現日歷應用

系統 OpenHarmony
eTS語言:基于TypeScript(簡稱TS)拓展的出來的,是OpenHarmony應用開發語言,使用ArkUI框架提供的組件進行界面開發。

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

51CTO 鴻蒙開發者社區

https://ost.51cto.com

前言

對于剛剛接觸OpenHarmony應用開發的開發者,最快的入門方式就是開發一個簡單的應用,下面記錄了一個日歷應用的開發過程,通過日歷應用的開發,來熟悉基本圖形的繪制,ArkUI的組件的使用,UI組件生命周期,加深對OpenHarmony應用開發的理解。

效果展示

開發環境

  • 開發工具:DevEco Studio 3.1 Release
  • 開發環境:OpenHarmony API 9
  • 開發語言:eTS

關于eTS

eTS語言:基于TypeScript(簡稱TS)拓展的出來的,是OpenHarmony應用開發語言,使用ArkUI框架提供的組件進行界面開發。

什么是TypeScript:
TypeScript 是微軟開發的一個開源的編程語言,是面向對象強類型化的,在 JavaScript 的基礎上引入了靜態類型、類、接口的概念。

TypeScript 和 JavaScript 的區別:

  • TypeScript 是 JavaScript 的超集,在JavaScript的基礎上拓展了語法,包含了 JavaScript 的所有元素
  • 在TypeScript 中的數據要求有明確的類型,而JavaScript中沒有
  • TypeScript在編譯時可以發現錯誤,JavaScript只有在運行時報錯

布局容器組件

  • Column :沿垂直方向布局的容器,可以包含多個子組件
  • Row:沿水平方向布局容器,可以包含多個子組件
  • Stack:堆疊容器,子組件按照順序依次入棧,后一個子組件覆蓋前一個子組件,可以包含多個子組件
  • Flex:彈性布局,元素在容器內水平居中,垂直等間隔分散,可以包含多個子組件
  • Scroll:可滑動的容器組件,當子組件的布局尺寸超過父組件的視口時,內容可以滑動,內部只支持單個子組件,可支持垂直或者水平滑動
  • Tabs:一種可以通過頁簽進行內容視圖切換的容器組件,每個頁簽對應一個內容視圖,只能包含子組件TabContent
  • List:列表包含一系列相同寬度的列表項。適合連續、多行呈現同類數據,例如圖片和文本,只能包含ListItem子組件
  • Swiper:滑動容器,提供左右切換子組件顯示的能力,可以包含多個子組件
  • Grid:網格容器,由“行”和“列”分割的單元格所組成,通過指定“項目”所在的單元格做出各種各樣的布局,只能包含GridItem子組件

繪制組件

  • Circle:圓形繪制組件
  • Ellipse:橢圓繪制組件
  • Line:直線繪制組件
  • Polyline:折線繪制組件
  • Polygon:多邊形繪制組件
  • Path:路徑繪制組件
  • Rect:矩形繪制組件
  • Shape:繪制組件的父組件,父組件中會描述所有繪制組件均支持的通用屬性。

自定義組件

自定義組件生命周期函數

  • aboutToAppear:在組件的 build 函數之前執行,可以做數據的初始化操作。
  • aboutToDisappear:在組件銷毀之前執行,不允許改變狀態變量,會導致應用程序行為不穩定,可以做資源的釋放操作。
  • onPageShow:僅@Entry修飾的自定義組件生效,應用進入前臺臺,頁面顯示時觸發。
  • onPageHide:僅@Entry修飾的自定義組件生效,應用進入后臺,頁面消失時觸發。

自定義組件常用屬性

  • @State :變量需要本地初始化,初始化的值可以被構造參數覆蓋;
  • @Prop:必須通過構造函數參數初始化,屬于單向數據綁定,使用其父組件提供的@State變量進行初始化
  • @Link:必須通過構造函數參數進行初始化,屬于雙向數據綁定,子組件對@Link變量的更改將同步修改父組件的@State變量;

實現過程

日歷一頁顯示42天,包括上個月、當前月、下個月的天數,上個月和下個月的日期顯示灰色,點擊日期顯示選中效果。
支持選擇年份、月份,指定一個日期,獲取當前月的天數,根據該月1號在一周中的第幾天,獲取上個月顯示的天數,以及下個月顯示的天數。

獲取上一個月的天數,根據指定月份的1號在一周的第幾天,上月最大天數,計算出上個月天數,以object的形式添加到數組,以便區分,代碼如下:

const prevMonthDays = [];
//獲取上個月最大天數
let prevLastDay = new Date(year, month-1, 0).getDate();
//獲取某月1號所在一周的第幾天
let startWeek = new Date(year, month, 1).getDay();
// 上個月的最大天數減去當前月1號所在一周的第幾天
for (let i = prevLastDay - startWeek + 1; i <= prevLastDay; i++) {
      prevMonthDays.push({
        date: new Date(year, month - 1, i),
        status: 'prev'
      });
}

獲取下一個月的天數,根據當前月份的1號在一周的第幾天,當前月份的最大天數,計算出下個月天數,以object的形式添加到數組,以便區分,代碼如下:

const nextMonthDays = [];
//獲取下個月最大天數
let curLastDay = new Date(year, month, 0).getDate();
//獲取當前月份1號在一周的第幾天
let startWeek = new Date(year, month, 1).getDay();
//一頁的天數減去當前月份的天數和上個月的天數
for (let i = 1; i <= 42 - startWeek - curLastDay + 1; i++) {
      nextMonthDays.push({
        date: new Date(year, month + 1, i),
        status: 'next'
      });
}

獲取當前月的天數,以object的形式添加到數組,以便區分,代碼如下:

let curLastDay = new Date(year, month, 0).getDate();
for (let i = 1; i <= curLastDay; i++) {
      curMonthDays.push({
        date: new Date(year, month, i),
		
        status: 'current'
      });
}

屏幕適配

屏幕適配需要用到媒體查詢的接口,可以根據設備參數,例如:屏幕分辨率、橫豎屏切換來修改應用的樣式。

首先導入媒體查詢模塊:

import mediaquery from '@ohos.mediaquery'

然后通過matchMediaSync接口設置媒體查詢條件,并保存返回的條件監聽句柄,例如:監聽設備類型,橫豎屏狀態。

//監聽橫豎屏狀態
private listener: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('(orientation: landscape)');
//監聽當前設備類型
private deviceListener: mediaquery.MediaQueryListener = mediaquery.matchMediaSync('screen and (device-type: default)');

定義觸發回調函數,當匹配到媒體查詢條件時會觸發此回調函數。

onOrientationChange = (mediaQueryResult) => {
  if (mediaQueryResult.matches) {
    this.calendarWidth = "70%"
    this.titleBarLeft = 80
  } else {
    this.calendarWidth = "100%"
    this.titleBarLeft = 20
  }
}
onDeviceTypeChange = (mediaQueryResult) => {
  if(mediaQueryResult.matches){
    this.titleBarLeftTop = 10
    this.weekHeight = 30
    this.pikerDialogHeight = 200
    console.log("onDeviceTypeChange  device-type: default")
  }else{
    this.titleBarLeftTop = 40
    this.weekHeight = 50
    this.pikerDialogHeight = 280
  }
}

通過條件監聽句柄去注冊回調函數,在 aboutToAppear 組件初始化的時候執行注冊,退出時銷毀監聽。

//組件初始化
aboutToAppear() {
  this.listener.on('change', this.onOrientationChange);
}
//組件銷毀
aboutToDisappear(){
  this.listener.off('change', this.onOrientationChange);
}

數據懶加載

當列表加載的數據過大時,直接采用循環渲染方式,導致頁面啟動時間過長,可以使用LazyForEach組件進行數據的懶加載進行優化,按需加載數據并創建相應組件。

定義一個類并實現IDataSource接口:

export class YearData implements IDataSource{

  private list: number[] = []
  private listener: DataChangeListener

  constructor(list: number[]) {
    this.list = list
  }

  totalCount(): number {
    return this.list.length
  }

  getData(index: number): any {
    return this.list[index]
  }

  getDataIndex(data:any){
    return this.list.indexOf(data)
  }

  registerDataChangeListener(listener: DataChangeListener): void {
    this.listener = listener
  }

  unregisterDataChangeListener() {
  }
}

在頁面中導入并使用。

import { YearData } from '../datasource/YearData'

private data: YearData = new YearData([])
LazyForEach(this.data, (item: string) => {
        ListItem() {
          Row() {
            Text(item).fontSize(20).margin({ left: 10 })
          }
        }
        .onClick(() => {
          this.data.pushData('item value: ' + this.data.totalCount())
        })
      }, item => item)
}

總結

日歷應用實現在一頁42個格子上顯示上個月、當前月、下個月的日期,通過日歷應用的開發了解到了ArkUI組件的一些用法,生命周期和數據的加載過程,對之后的應用開發有很大的幫助。

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

51CTO 鴻蒙開發者社區

https://ost.51cto.com

責任編輯:jianghua 來源: 51CTO 鴻蒙開發者社區
相關推薦

2022-07-26 14:40:42

ArkUIJS

2022-05-27 14:55:34

canvas畫布鴻蒙

2022-09-15 15:04:16

ArkUI鴻蒙

2022-09-20 14:35:59

ArkUI鴻蒙JS

2022-08-04 13:55:08

拼數字小游戲鴻蒙

2023-08-17 15:04:22

2022-08-05 19:37:59

鴻蒙Api框架

2022-10-24 14:49:54

ArkUI心電圖組件

2022-11-02 16:06:54

ArkUIETS

2022-06-28 14:42:26

ETS購物車應用

2021-12-27 15:10:55

鴻蒙HarmonyOS應用

2022-09-16 15:34:32

CanvasArkUI

2022-03-17 15:28:18

五子棋HarmonyOSJSAPI

2022-07-20 15:32:25

時鐘翻頁Text組件

2023-08-17 15:01:08

ArkUI布局渲染

2022-08-05 19:27:22

通用API鴻蒙

2022-09-14 15:17:26

ArkUI鴻蒙

2022-10-17 14:36:09

ArkUI虛擬搖桿組件

2023-02-13 15:54:49

2022-01-07 09:56:16

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

亚洲柠檬福利资源导航| 日本女优在线视频一区二区| 亚洲精品一区二区三区蜜桃下载| 日本十八禁视频无遮挡| 成人jjav| 国产成人精品一区二| 久久免费福利视频| 亚洲黄色免费视频| 日韩黄色av| 91久久精品网| 麻豆传媒网站在线观看| 四虎影视精品成人| 麻豆精品在线播放| 性欧美xxxx交| 三级黄色录像视频| 久久免费视频66| 欧美久久久久免费| 免费国产黄色网址| 蜜芽在线免费观看| 91麻豆国产在线观看| 91视频国产一区| 欧产日产国产69| 国产精品mm| 中文字幕视频一区二区在线有码 | 欧美理论片在线| 青青青国产在线观看| 蜜桃视频在线观看www社区 | 免费看黄裸体一级大秀欧美| 久久在线视频在线| 中文字幕国产专区| 精品欠久久久中文字幕加勒比| 4438亚洲最大| 国产高潮免费视频| 欧美www.| 狠狠久久亚洲欧美专区| 轻点好疼好大好爽视频| 久操视频在线| 国产精品免费aⅴ片在线观看| 九九九九久久久久| 亚洲精品国偷拍自产在线观看蜜桃 | 欧美123区| 欧美网站在线观看| 国产日韩av网站| 亚洲91av| 亚洲精品中文字幕乱码三区 | 中文字幕久久久久久久| 成人黄色免费网站| 日本乱人伦一区| 日本中文字幕片| 涩涩视频在线播放| 精品久久久久久亚洲国产300| 97超碰国产精品| 亚洲制服国产| 亚洲精品国产无天堂网2021| 手机成人av在线| 毛片激情在线观看| 日韩理论片网站| 亚洲欧洲精品一区二区三区波多野1战4| 精品成人一区二区三区免费视频| 久久嫩草精品久久久精品| 久久精品国产一区二区三区日韩| 婷婷在线免费视频| www.欧美亚洲| 久久一区二区精品| 日韩电影网址| 国产亚洲福利社区一区| 日本一区高清在线视频| 大胆av不用播放器在线播放| 欧美韩日一区二区三区四区| 亚洲欧美国产精品桃花| 日本高清视频在线观看| 亚洲人xxxx| 久久综合久久久久| 精精国产xxxx视频在线播放| 色综合色综合色综合| 成人性做爰aaa片免费看不忠| 免费看av不卡| 欧美日韩1234| 亚洲欧洲日韩综合| 天堂av一区二区三区在线播放| 亚洲精品丝袜日韩| 国产极品视频在线观看| 一区二区三区网站| 69**夜色精品国产69乱| 波多野结衣一区二区三区在线| 看片的网站亚洲| 操人视频欧美| 日韩一区二区三区中文字幕| 国产欧美一区二区三区鸳鸯浴| 一区二区三区国| 欧美人与性动交α欧美精品济南到| 欧美日韩国产区| 亚洲色图 在线视频| 国产一区二区在线观| 亚洲国产成人久久综合一区| 丰满的亚洲女人毛茸茸| 在线中文字幕亚洲| 热久久免费视频精品| 亚洲专区在线播放| 99久久精品免费| 亚洲精品国产精品国自产| 人妖欧美1区| 色综合天天性综合| 日韩精品视频网址| 女厕嘘嘘一区二区在线播放 | 九色一区二区| 久久99精品久久| 色综合天天综合给合国产| 欧美国产日韩在线视频| 色天天色综合| 久久五月天综合| 亚洲欧美偷拍一区| 国产福利精品导航| 日本视频一区二区不卡| 免费av不卡在线观看| 欧美性受xxxx| jjzzjjzz欧美69巨大| 99久久激情| 欧美一级淫片aaaaaaa视频| 国产又大又黄的视频| 久久久午夜精品| 国产欧美久久久久| 欧美另类激情| 亚洲欧美日韩在线高清直播| 岛国毛片在线观看| 久久国产精品99久久久久久老狼| 精品亚洲一区二区三区四区五区高| porn亚洲| 色婷婷国产精品综合在线观看| 黄色国产在线视频| 一区二区三区网站 | 99re8这里有精品热视频8在线| 在线播放日韩av| 国产精品久免费的黄网站| 国产v综合v亚洲欧| a级网站在线观看| 久久精品嫩草影院| 亚洲最新在线视频| 中文字幕一区在线播放| 国产精品一区二区果冻传媒| 亚洲国产一区二区三区在线播| 亚洲最大成人| 精品偷拍各种wc美女嘘嘘| 精品一区二区三区四| 国产在线精品一区二区夜色| 亚洲欧美日韩国产yyy| av有声小说一区二区三区| 亚洲老头同性xxxxx| 视频一区二区三区四区五区| 久久一日本道色综合| 黄色影院一级片| 欧洲亚洲视频| 538国产精品视频一区二区| 手机看片1024国产| 欧美色欧美亚洲高清在线视频| 性久久久久久久久久| 噜噜噜91成人网| 欧美主播一区二区三区美女 久久精品人| 九色porny丨入口在线| 日韩av一区二区在线观看| 国产黄色片免费看| www国产亚洲精品久久麻豆| www.中文字幕在线| 欧洲杯什么时候开赛| 国产欧美亚洲视频| 老司机在线看片网av| 91精品国产综合久久福利| av成人免费网站| 国产成人精品三级| 欧美日韩一道本| 久久不见久久见中文字幕免费| 国产91精品在线播放| 思思99re6国产在线播放| 91精品国产色综合久久不卡蜜臀| 成人观看免费视频| 成人免费视频一区| 男女av免费观看| 成人在线免费观看网站| 亚洲一区久久久| 黑人极品ⅴideos精品欧美棵| 精品国内二区三区| 中文在线第一页| 中文字幕在线播放不卡一区| 成人做爰69片免费| 天堂一区二区在线| 在线免费观看成人| 99re8这里有精品热视频8在线| 日本中文字幕久久看| 国产网站在线免费观看| 精品少妇一区二区三区日产乱码| 国产精品xxxx喷水欧美| 国产精品久久午夜| 中文字幕天堂网| 日本网站在线观看一区二区三区 | 亚洲激情不卡| 少妇免费毛片久久久久久久久| 精品国产乱码一区二区三区| 欧美一级片久久久久久久| 国产三区在线观看| 亚洲欧美中文日韩在线| 97人妻精品一区二区三区软件| 亚洲超碰97人人做人人爱| 后入内射无码人妻一区| proumb性欧美在线观看| 91亚洲精品久久久蜜桃借种| 国产精品美女久久久浪潮软件| 亚洲欧美国产一区二区| 思热99re视热频这里只精品| 亚洲一区二区久久久久久| 超碰一区二区| 欧美日韩国产成人在线| gogogo高清在线观看免费完整版| 欧美电视剧在线看免费| 中文字幕码精品视频网站| 亚洲国产综合色| 九九热久久免费视频| 91影院在线免费观看| 三级av免费看| 强制捆绑调教一区二区| 日本欧美黄色片| 亚洲色图二区| 亚洲国产欧美不卡在线观看| 卡一精品卡二卡三网站乱码| 亚洲综合国产精品| 欧美黄色网络| 国产精品久久久久久久久久新婚| av成人影院在线| 欧美超级免费视 在线| 99reav在线| 亚洲精品视频播放| 少妇精品高潮欲妇又嫩中文字幕 | 精品在线播放| 国内视频一区| 都市激情亚洲欧美| eeuss一区二区三区| 粉嫩av国产一区二区三区| 国产精品看片资源| 日韩av免费| 日本久久久a级免费| 天堂电影一区| 孩xxxx性bbbb欧美| 19禁羞羞电影院在线观看| 九九精品在线观看| 黄色av电影在线播放| 精品国产欧美成人夜夜嗨| 9色在线视频网站| 中文字幕欧美日韩精品| 成人av一区| 中文字幕免费精品一区| 在线观看的av| 精品国产区一区二区三区在线观看| 91女主播在线观看| 日韩在线播放视频| 精品欧美色视频网站在线观看| 久久九九国产精品怡红院| dy888亚洲精品一区二区三区| 久久久av亚洲男天堂| www视频在线看| 欧美黑人性视频| 123区在线| 欧美中文字幕在线| 伊人久久国产| 国产精品福利观看| 看片一区二区| 成人网在线观看| 亚洲精品18| 国产精品永久入口久久久| 欧美91在线| 视频一区视频二区视频三区高| 久久婷婷蜜乳一本欲蜜臀| 波多野结衣三级在线| 国精品一区二区三区| 欧美精品久久久久久久久久久| 国产精品久久777777毛茸茸 | 国产精品资源网站| 欧洲成人午夜精品无码区久久| 99免费精品在线观看| 最近中文字幕在线mv视频在线| 国产精品青草综合久久久久99| 亚洲精品卡一卡二| 午夜精品免费在线观看| 91丨九色丨海角社区| 91麻豆精品国产自产在线| 日韩一区二区三区在线观看视频| 亚洲视频在线免费看| 秋霞午夜在线观看| 久久久久久久久久婷婷| 精品日韩视频| 99久热re在线精品996热视频| 亚洲精品亚洲人成在线| 亚洲一二区在线| 亚洲视频综合| 午夜久久久精品| 亚洲制服国产| 亚洲区在线播放| 午夜激情在线| 日韩av免费在线观看| 日本免费精品| 欧美一区视久久| 欧美 日韩 国产 一区| 国产黄色一级网站| 国产一区亚洲一区| 午夜理伦三级做爰电影| 一区二区激情视频| 亚洲视频久久久| 国产偷亚洲偷欧美偷精品| 日本动漫理论片在线观看网站| 国产精品91久久久久久| 精品国产一区二区三区成人影院| 夜夜爽www精品| 久久久亚洲人| 黄色在线免费播放| 亚洲激情在线激情| 一区二区视频播放| 亚洲精品在线观看www| 人人超在线公开视频| 91精品视频在线看| 欧美丝袜激情| 久久精品香蕉视频| 成人av中文字幕| 青青草手机在线观看| 欧美精品一二三| 国产精品天堂| 日本精品久久久久久久| 国产精品高潮呻吟久久久久| 红桃一区二区三区| 国产在线看一区| 四虎永久免费地址| 在线观看日韩电影| 国产在线视频网| 国产成人涩涩涩视频在线观看| 风间由美一区二区av101| 成人黄色片免费| 国产美女一区二区三区| 秋霞欧美一区二区三区视频免费| 在线免费观看日本一区| 男生女生差差差的视频在线观看| 夫妻av一区二区| 一级肉体全黄裸片| 狠狠色香婷婷久久亚洲精品| 色婷婷av一区二区三| 欧美高清激情视频| 午夜电影一区| 精品久久久无码人妻字幂| 国产精品夜夜爽| 欧美成人aaa片一区国产精品| 91精品国产综合久久香蕉的特点| 99se视频在线观看| 成人免费视频在线观看超级碰| 欧美mv日韩| 在线播放黄色av| 一区二区三区视频在线看| www.久久色| 高清欧美性猛交xxxx黑人猛交| 国产欧美啪啪| 青青草国产免费| jvid福利写真一区二区三区| 国产精品suv一区二区三区| 日韩黄色av网站| 欧美艳星kaydenkross| 日韩免费电影一区二区| 美女任你摸久久 | 成人毛片在线精品国产| 国模视频一区二区| 午夜欧洲一区| 午夜激情在线观看视频| 国产精品人妖ts系列视频| 国产熟女精品视频| 国产69精品久久久久9999| 亚洲自拍电影| 色噜噜狠狠一区二区| 亚洲美女屁股眼交| 手机看片福利在线| 国产精品麻豆va在线播放| 无码一区二区三区视频| 99re这里只有| 在线观看欧美黄色| 亚洲资源一区| 久久综合久久综合这里只有精品| 日韩国产精品久久久| 侵犯稚嫩小箩莉h文系列小说| 亚洲成人精品久久久| 色成人免费网站| 久久久久久久久久伊人| 26uuu亚洲| 国产又爽又黄又嫩又猛又粗| 久久久久久噜噜噜久久久精品| 国产一区二区电影在线观看| 国产精品探花在线播放| 欧美日韩国产丝袜另类| 免费在线午夜视频| 精品视频在线观看| 久久99这里只有精品| 草久久免费视频| 久久久精品美女| 日韩黄色网络| 亚洲女人在线观看| 91高清在线观看| 99在线视频影院| 亚洲一区二区三区加勒比|