精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

青青草综合视频| 亚洲va久久久噜噜噜| 视频在线观看免费高清| 日本高清视频在线观看| 精品一区二区日韩| 欧美激情中文字幕乱码免费| 人妻熟女aⅴ一区二区三区汇编| 午夜羞羞小视频在线观看| av一区二区三区四区| 国产精品久久久久99| 国产精品九九九九九九| 日韩高清电影免费| 4438成人网| 中文网丁香综合网| 五月婷婷在线观看视频| 91久久视频| www国产91| 女同性恋一区二区三区| 欧美高清xxx| 欧美色视频日本高清在线观看| 国产精品v欧美精品v日韩| 亚洲国产精品无码久久久| 深夜福利久久| 精品免费一区二区三区| 婷婷六月天在线| 九九色在线视频| 国产精品久久久久一区二区三区 | 无码黑人精品一区二区| 一本色道久久综合狠狠躁的番外| 91成人免费网站| 欧美中日韩在线| 午夜在线播放| 国产日本欧洲亚洲| 久久久精品国产一区二区三区| 亚洲 日本 欧美 中文幕| 在线播放不卡| 欧美大片欧美激情性色a∨久久| 一级黄色片毛片| 午夜影院在线播放| 亚洲国产精品av| 欧美高清视频一区二区三区在线观看| 亚洲 小说区 图片区| 天天揉久久久久亚洲精品| 亚洲欧美日韩国产精品| 黄色录像a级片| 麻豆精品少妇| 亚洲国产成人av在线| 午夜免费福利影院| 黄色成人美女网站| 亚洲精品久久久久久久久久久| 久久久国产欧美| 色老太综合网| 在线观看免费成人| 一级黄色香蕉视频| 日本精品600av| 国产视频一区不卡| 日本三级中国三级99人妇网站| 国产又粗又黄又爽| 精品一区二区三区免费毛片爱| 91精品国产91久久久久久久久| aaaaa级少妇高潮大片免费看| 搞黄网站在线看| 亚洲自拍偷拍九九九| 91动漫在线看| 欧美调教sm| 在线影视一区二区三区| 天天爱天天操天天干| а√天堂8资源在线| 亚洲一区二区三区四区的| av片在线免费| 国产免费拔擦拔擦8x高清在线人| 国产精品久久久久久久久久久免费看 | 青青在线视频一区二区三区| 国产尤物在线视频| 中出一区二区| 欧美激情一区二区三区成人| 日韩欧美三级视频| 日韩国产精品91| 国产精品视频一区二区三区四| 国产精品久久久久久99| 狂野欧美一区| 欧美一级电影久久| 国产一级特黄a高潮片| 亚洲免费综合| 国产精品视频专区| 草草视频在线播放| 国产精品自拍在线| 国产综合久久久久| 日本三级一区二区三区| 久久99久久99| 国产伦精品一区二区三区照片| 性中国xxx极品hd| 91日韩精品一区| 一区二区三区四区视频在线 | 最近2019免费中文字幕视频三| 日本黄色录像片| 成人激情自拍| 国产亚洲精品一区二555| 欧美激情图片小说| 亚洲综合99| 91日本在线观看| 日本成人一区二区三区| 亚洲人成在线播放网站岛国 | www.色偷偷.com| 香蕉成人app| 欧美成人综合网站| 中文字幕成人动漫| 好看的av在线不卡观看| 国产精品美女av| 手机看片福利在线| 亚洲欧美日韩在线不卡| 免费看日本黄色| 国产成人免费9x9x人网站视频 | 国产精品女同互慰在线看| 91免费国产精品| 高清在线一区| 日韩国产高清视频在线| 亚洲午夜福利在线观看| 你懂的一区二区| 国产精品色悠悠| 午夜影院免费体验区| 亚洲免费av网站| 亚洲第一中文av| 亚州av日韩av| 午夜精品一区二区三区在线视频| 99热只有这里有精品| 国产美女一区二区| 婷婷精品国产一区二区三区日韩| 久久久久久久久免费视频| 岛国av在线不卡| 中文字幕在线国产| 中文字幕免费一区二区| 国产精品永久免费| 岛国在线大片| 色综合久久88色综合天天 | 黄色在线看片| 91精品国产综合久久香蕉麻豆| 久久精品aⅴ无码中文字字幕重口| 欧美理伦片在线播放| 欧美激情一二区| 亚洲av无码乱码国产精品| 99re这里只有精品首页| 神马影院一区二区| 3d性欧美动漫精品xxxx软件| 日韩精品丝袜在线| 日韩不卡视频在线| 99久久99久久久精品齐齐| 成年女人18级毛片毛片免费| 成人激情自拍| 色偷偷偷亚洲综合网另类| 久久免费在线观看视频| 国产九色精品成人porny| 一道本在线观看视频| 欧美天堂一区| 日韩精品久久久久| 久热这里只有精品6| 91丨porny丨蝌蚪视频| 欧美三级一级片| 欧美一区=区三区| xxxxx成人.com| 国产又粗又猛又爽| 一区二区三区欧美| www国产视频| 日韩一级欧洲| 欧美日韩亚洲在线| 国产一区精品福利| 久久97久久97精品免视看| 黄色一级大片在线免费看国产一| 日本一区二区三区国色天香| 青青艹视频在线| 啄木系列成人av电影| 国产成人精品久久| 日韩av中文| 日韩欧美一级精品久久| 日韩三级小视频| 国产成+人+日韩+欧美+亚洲| 一区二区三区四区欧美日韩| 久久综合偷偷噜噜噜色| 97免费视频在线播放| 男操女在线观看| 欧美喷潮久久久xxxxx| 免费一级片在线观看| 国产麻豆视频精品| 久久久亚洲精品无码| 国产精品一区二区av交换| 成人久久久久爱| aa级大片免费在线观看| 亚洲性生活视频在线观看| 国产精品久久久久久在线| 中文字幕av一区二区三区| 91亚洲一区二区| 性一交一乱一区二区洋洋av| 国产一区二区精品免费| 国产精品毛片久久久久久久久久99999999| 日韩电影中文字幕一区| 最近国语视频在线观看免费播放| 国产日韩欧美麻豆| 性生交大片免费看l| 久久精品欧洲| 久久久久久av无码免费网站下载| 中文字幕视频精品一区二区三区| 欧美另类高清videos| 你懂的在线播放| 91精品国产一区二区人妖| 91九色丨porny丨肉丝| 亚洲欧洲制服丝袜| 国产人妻精品午夜福利免费| 久久久久久穴| 日韩中文字幕一区二区| 国产精品第一| 午夜精品一区二区三区在线视| 性xxxx18| 欧美一二三区在线| 超碰在线观看91| 香蕉成人伊视频在线观看| 91香蕉视频网| 久久久国产精品不卡| zjzjzjzjzj亚洲女人| 国产在线视频不卡二| 亚洲精品一二三四五区| 天堂美国久久| 日韩精品伦理第一区| 日韩美脚连裤袜丝袜在线| 亚洲xxxx18| 另类一区二区| 国产精品www色诱视频| 狠狠操一区二区三区| 欧美激情在线视频二区| 青青草在线免费观看| 精品毛片乱码1区2区3区| 久草手机在线观看| 亚洲综合一二区| 国产高潮国产高潮久久久91| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 成人小说亚洲一区二区三区| 偷拍亚洲欧洲综合| 国产精品第108页| 亚洲美女偷拍久久| 久草综合在线视频| 亚洲欧洲日韩综合一区二区| 女人黄色一级片| 国产欧美一区二区精品性色| 亚洲AV无码国产成人久久| 久久这里都是精品| 亚洲第一成人网站| 久久九九全国免费| 中文字幕网站在线观看| 久久久国际精品| 中文字幕有码在线播放| 国产日本欧洲亚洲| 中国特黄一级片| 中文字幕亚洲综合久久菠萝蜜| 一边摸一边做爽的视频17国产| 久久精品国产第一区二区三区 | 久久久久久自在自线| 精品中文字幕av| 久久国产66| 手机在线免费观看毛片| 美日韩一区二区| www.av蜜桃| 99久久精品网| 中文字幕色呦呦| 青青草国产成人a∨下载安卓| 国产精品区免费视频| 麻豆一区二区麻豆免费观看| 欧美18视频| 欧美三级自拍| 日本一区免费看| 久久电影院7| 日韩视频一二三| 在线成人av| 动漫av免费观看| 精品一区二区三区不卡 | xxxx日本黄色| 国产精品毛片无遮挡高清| 精品欧美一区二区久久久久| 天天操天天干天天综合网| 免费无遮挡无码永久在线观看视频| 国产精品久久久久久户外露出| 四虎永久免费影院| 国产精品毛片高清在线完整版| 粉嫩av蜜桃av蜜臀av| 中文字幕一区二区不卡| 国产性70yerg老太| 日本电影亚洲天堂一区| 国产丝袜视频在线观看| 日韩高清有码在线| 久cao在线| 8050国产精品久久久久久| 成人交换视频| 国产精品综合久久久久久| 深爱激情久久| av 日韩 人妻 黑人 综合 无码| 在线成人直播| 无码人妻丰满熟妇区五十路百度| 久久精品中文| 999热精品视频| 91蝌蚪porny| 丁香花五月激情| 欧美性视频一区二区三区| 刘玥91精选国产在线观看| 中文字幕av一区二区| 91伦理视频在线观看| 久久久中文字幕| 免费成人高清在线视频| 好看的日韩精品视频在线| 窝窝社区一区二区| 国产成人精品免费看在线播放 | 久久久三级国产网站| 黄视频网站免费看| 91高清视频免费看| 人妻精品一区二区三区| 久久视频这里只有精品| 亚洲成人人体| 国产欧美日韩在线播放| 夜间精品视频| 毛片在线视频观看| 亚洲精品黄色| 三级网站免费看| 99r国产精品| 麻豆亚洲av成人无码久久精品| 五月婷婷久久综合| 国内精品国产成人国产三级| 日韩视频在线免费观看| 亚洲成人看片| 欧美亚洲免费高清在线观看| 亚洲黄页一区| 精品无码人妻少妇久久久久久| 国产三级一区二区| 国产又爽又黄的视频| 精品福利视频一区二区三区| 手机在线免费看av| 人体精品一二三区| 牛牛精品成人免费视频| 亚洲精品白虎| 日韩影院在线观看| 91成年人网站| 色婷婷国产精品综合在线观看| 国产原创中文av| 色哟哟亚洲精品一区二区| 国产在视频一区二区三区吞精| 国产精品免费一区二区| 欧美成人一品| 欧洲成人午夜精品无码区久久| 国产欧美日韩精品一区| 欧美人妻精品一区二区免费看| 色一情一伦一子一伦一区| 免费在线黄色网址| 欧美最猛性xxxxx亚洲精品| 亚洲成aⅴ人片久久青草影院| 精品国产一区二区三区在线| 亚洲一区二区三区免费在线观看| 国产精品久久a| 91免费小视频| 中文字幕手机在线视频| 日韩精品在线一区| 久久不射影院| 国产综合久久久久久| 亚洲女娇小黑人粗硬| 久久人妻精品白浆国产| 国产亚洲综合色| 中文字幕av免费观看| 久久精品国产2020观看福利| 欧美专区福利免费| 少妇免费毛片久久久久久久久| 国产精品毛片在线看| 人妻精品久久久久中文字幕| 欧洲一区二区三区在线| 欧美三级黄网| 国产高清精品一区| 在线成人直播| 色婷婷激情视频| 亚洲一区二区三区小说| 99久久精品日本一区二区免费 | 国产精品久久麻豆| 国产91网红主播在线观看| 成人在线免费观看视频| 污免费在线观看| 中文字幕字幕中文在线中不卡视频| 黄色网址中文字幕| 久久精品国产96久久久香蕉| 成人av综合网| 午夜精品在线免费观看| 亚洲精品视频在线| 欧美成人免费| 日韩av免费在线播放| 亚洲欧美在线专区| 丰满大乳奶做爰ⅹxx视频| 欧美性生活大片视频| 18+视频在线观看| 欧美精品七区| 国产精品一区二区x88av| 黄色在线免费观看| 欧美理论电影在线播放| 精品国产成人| 中文字幕第3页| 在线播放91灌醉迷j高跟美女| 免费看a在线观看| 久久草.com| 国内成人精品2018免费看|