国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

通過(guò)編寫(xiě)計(jì)算器學(xué)習(xí)ArkUI組件

系統(tǒng) OpenHarmony
本篇幅描述了從需求開(kāi)始一步步到代碼實(shí)現(xiàn);從設(shè)計(jì)圖到代碼實(shí)現(xiàn);從技術(shù)要點(diǎn)到代碼實(shí)現(xiàn)。從學(xué)到用,從用到學(xué),逐漸掌握ArkUI框架的ets項(xiàng)目開(kāi)發(fā)。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

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

想要程序做什么首先自己要明確自己想要什么,通過(guò)分析選題思考程序需要哪些信息,如何與用戶(hù)進(jìn)行交互,以及以什么樣的形式反饋給用戶(hù)(即UI設(shè)計(jì)),最終通過(guò)運(yùn)行調(diào)試完成整個(gè)應(yīng)用程序的開(kāi)發(fā)。

一、做什么

做一款多功能的計(jì)算器,其中類(lèi)型包含標(biāo)準(zhǔn)計(jì)算器、科學(xué)計(jì)算器、程序員計(jì)算器、房貸計(jì)算器等。

二、做成什么樣

計(jì)算器給用戶(hù)提供多功能選擇,通過(guò)按鈕進(jìn)行交互,文本進(jìn)行反饋顯示,并通過(guò)一系列數(shù)據(jù)處理,最終反饋給用戶(hù)正確的值。可以通過(guò)一幅圖或者一個(gè)演示Demo來(lái)確認(rèn)是否與預(yù)期相符,便于不會(huì)因?yàn)闆Q策導(dǎo)致返工(本節(jié)以標(biāo)準(zhǔn)計(jì)算器為例,其他示例不在此處贅述)。

1、分析

將整個(gè)頁(yè)面分為三塊,標(biāo)題欄,顯示區(qū),功能按鈕區(qū)。

  • 標(biāo)題欄: 通過(guò)點(diǎn)擊圖標(biāo)切換不同計(jì)算器,同時(shí)提供歷史記錄查詢(xún)。
  • 顯示區(qū): 通過(guò)兩個(gè)文本組件分別顯示錄入計(jì)算表達(dá)式和計(jì)算結(jié)果。
  • 功能按鈕區(qū): 功能按鈕區(qū)分為功能按鈕(如清空,回退等),符號(hào)按鈕(如加、減等),及數(shù)字按鈕(0-9數(shù)字鍵)。

2、 用到的知識(shí)點(diǎn)

對(duì)即將實(shí)現(xiàn)的標(biāo)準(zhǔn)計(jì)算器UI界面分析后,從中提煉出需要用到的技術(shù)。

  • 對(duì)于實(shí)現(xiàn)設(shè)計(jì)的UI界面,需要了解ArkUI的【布局約束】。
  • 對(duì)于三大塊自上而下的布局方式,需要了解【Flex布局】或【Column容器組件】。
  • 對(duì)于三大塊內(nèi)元素(組件)排列,需要了解【Flex布局】或【Row容器組件】。
  • 對(duì)于UI界面中點(diǎn)擊選擇,需要了解【Menu控制】。
  • 對(duì)于UI界面中單個(gè)按鈕元素(組件),需要了解【Button組件】和【點(diǎn)擊事件】。
  • 對(duì)于UI界面中單個(gè)文本顯示元素(組件),需要了解【Text組件】和【@State組件狀態(tài)管理】。

三、編寫(xiě)代碼

1、 分析示例代碼

創(chuàng)建項(xiàng)目和目錄結(jié)構(gòu)已經(jīng)在 了解一些ArkUI概念并熟悉應(yīng)用的結(jié)構(gòu) 中介紹過(guò)了,有需要可以查看。打開(kāi)index.ets文件,示例代碼實(shí)現(xiàn)了頁(yè)面居中顯示Hello World,先來(lái)了解每行代碼代表的含義。

@Entry
@Component
struct Index {
build() {...}
}

1.1 @Entry裝飾器

@Entry 注解(裝飾,我更愿意稱(chēng)為注解)的自定義組件(在ArkUI中一切皆為組件,使用已有組件組合構(gòu)成頁(yè)面)作為頁(yè)面的默認(rèn)入口,也可以理解為頁(yè)面的根節(jié)點(diǎn)。當(dāng)頁(yè)面被加載時(shí),首先創(chuàng)建并呈現(xiàn)@Entry注解的組件,一個(gè)頁(yè)面中有且僅能使用一個(gè)@Entry注解,只有使用@Entry注解的組件或子組件,才會(huì)在頁(yè)面上顯示。

1.2 @Component裝飾器

@Component 注解(裝飾)的代碼塊具有組件化能力,能夠成為一個(gè)獨(dú)立的組件,這個(gè)類(lèi)型組件也稱(chēng)為自定義組件,必須在build()方法描述UI結(jié)構(gòu),且不能自定義構(gòu)造函數(shù)。

// 這種寫(xiě)法錯(cuò)誤,因?yàn)槿鄙賐uild()方法
// 報(bào)錯(cuò) struct 'MyComponent' must be at least or at most one 'build' method.
@Component
struct MyComponent {
Flex() {}
}

自定義組件具有以下特點(diǎn):

  • 可組合:可以使用內(nèi)置組件、其他組件、公共屬性和方法組合需要的UI結(jié)構(gòu),比如使用Text和Button組件自定義彈窗組件。
  • 可重用:自定義組件可以被其他組件重用,并作為不同的實(shí)例在不同的父組件或容器中使用,比如自定義彈窗可以多次重復(fù)使用。
  • 生命周期:生命周期的回調(diào)方法可以在組件中配置,用于業(yè)務(wù)邏輯處理。
  • 數(shù)據(jù)驅(qū)動(dòng)更新:由狀態(tài)變量的數(shù)據(jù)驅(qū)動(dòng),實(shí)現(xiàn)UI自動(dòng)更新。

1.3 build()函數(shù)(方法)

build() 滿(mǎn)足Build構(gòu)造器接口定義,用于定義組件的聲明式UI描述。在build方法中以聲明式方式進(jìn)行組合自定義組件或系統(tǒng)內(nèi)置組件,在組件創(chuàng)建和更新場(chǎng)景中都會(huì)調(diào)用build方法。build方法僅支持組合組件,使用渲染控制語(yǔ)句。

  build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
Text('Hello World')
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
.height('100%')
}

2、 Flex容器組件和Flex布局

通過(guò)3.1小節(jié)的了解,我們可以在被@Entry和@Componet注解的代碼塊中的build函數(shù)中使用框架提供的內(nèi)置基本組件和布局(容器)組件來(lái)構(gòu)建自定義組件并顯示到頁(yè)面中。當(dāng)然我們也可以不適用容器組件而直接使用基本組件來(lái)構(gòu)建頁(yè)面元素,但不推薦這種做法,組件過(guò)多無(wú)法有效的進(jìn)行布局控制。如下代碼與示例效果相同:

@Entry
@Component
struct Index {
build() {
Text('Hello World')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.textAlign(TextAlign.Center)
.width('100%')
.height('100%')
// Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
// Text('Hello World')
// .fontSize(50)
// .fontWeight(FontWeight.Bold)
// }
// .width('100%')
// .height('100%')
}
}

為了滿(mǎn)足復(fù)雜的、可控的、已維護(hù)的UI界面,我們必須對(duì)容器組件有一定的了解,在不同的場(chǎng)景下使用不同的容器組件,可以快速有效的構(gòu)建符合需要的UI界面。接下來(lái)使用Flex容器組件實(shí)現(xiàn)標(biāo)準(zhǔn)計(jì)算器三大塊分隔。

2.1 Flex容器組件

Flex容器組件稱(chēng)為彈性布局組件,通過(guò)簡(jiǎn)單靈活的控制子組件、并具備響應(yīng)式,可以實(shí)現(xiàn)各種頁(yè)面布局,因此Flex布局作為首選布局。

Flex容器組件具有以下特點(diǎn):

  • 四種子組件布局模式:Row(行方向)、RowReverse(反Row)、Column(列方向)、ColumnReverse(反列)。
  • 容器元素單行/多行顯示:NoWrap(單行/列布局)、Wrap(多行/列布局)、WrapReverse(反向多行/列布局),均允許元素超出容器。
  • 兩種對(duì)齊方式:主軸對(duì)齊方式和交叉軸對(duì)齊方式。
  • 僅當(dāng)父組件為Flex容器組件時(shí),還可以設(shè)置子組件在主軸方向上基準(zhǔn)尺寸(flexBasis)、子組件在容器剩余空間的比例(flexGrow)、壓縮尺寸分配給子組件(flexShrink)以及設(shè)置子組件在容器中交叉軸對(duì)齊方式(alignSelf)。
@Entry
@Component
struct Index {
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center,
justifyContent: FlexAlign.Center }) {
Text('主軸與行方向一致作為布局模式')
.fontSize(9)
.fontColor('#CCCCCC')
.width('90%')
// 主軸與行方向一致作為布局模式
Flex({direction: FlexDirection.Row, wrap: FlexWrap.NoWrap,
justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center}) {
Text('A').flexGrow(2).height(100).fontSize(50)
.backgroundColor('#F2F2F2').textAlign(TextAlign.Center)
Text('B').flexGrow(1).height(100).fontSize(50)
.backgroundColor('#E2E2E2').textAlign(TextAlign.Center)
}
.width('100%').height(120).padding(10)

Text('與Row方向相反方向進(jìn)行布局')
.fontSize(9)
.fontColor('#CCCCCC')
.width('90%')
// 與Row方向相反方向進(jìn)行布局
Flex({direction: FlexDirection.RowReverse, wrap: FlexWrap.NoWrap,
justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center}) {
Text('A').flexGrow(2).height(100).fontSize(50)
.backgroundColor('#F2F2F2').textAlign(TextAlign.Center)
Text('B').flexGrow(1).height(100).fontSize(50)
.backgroundColor('#E2E2E2').textAlign(TextAlign.Center)
}
.width('100%').height(120).padding(10)
Text('主軸與列方向一致作為布局模式')
.fontSize(9)
.fontColor('#CCCCCC')
.width('90%')
// 主軸與列方向一致作為布局模式
Flex({direction: FlexDirection.Column, wrap: FlexWrap.NoWrap,
justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center}) {
Text('A').flexGrow(2).width('100%').fontSize(50)
.backgroundColor('#F2F2F2').textAlign(TextAlign.Center)
Text('B').flexGrow(1).width('100%').fontSize(50)
.backgroundColor('#E2E2E2').textAlign(TextAlign.Center)
}
.width('100%').height(200).padding(10)
Text('與Column相反方向進(jìn)行布局')
.fontSize(9)
.fontColor('#CCCCCC')
.width('90%')
// 與Column相反方向進(jìn)行布局
Flex({direction: FlexDirection.ColumnReverse, wrap: FlexWrap.NoWrap,
justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center}) {
Text('A').flexGrow(2).width('100%').fontSize(50)
.backgroundColor('#F2F2F2').textAlign(TextAlign.Center)
Text('B').flexGrow(1).width('100%').fontSize(50)
.backgroundColor('#E2E2E2').textAlign(TextAlign.Center)
}
.width('100%').height(200).padding(10)
}
.width('100%')
.height('100%')
}
}

2.2 標(biāo)準(zhǔn)計(jì)算器Flex布局實(shí)現(xiàn)

通過(guò)Flex容器布局構(gòu)建頁(yè)面,子組件以三個(gè)Flex容器組件為主,占比分別為1、2、4,并使用不同的背景色做簡(jiǎn)單的區(qū)域劃分,代碼如下:

@Entry
@Component
struct Index {
build() {
Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center,
justifyContent: FlexAlign.Center }) {
// 頂部功能按鈕
Flex({direction: FlexDirection.Row}) {}
.flexGrow(1)
.width('100%')
.backgroundColor('#F2F2F2')
// 回顯及結(jié)果顯示區(qū)
Flex({direction: FlexDirection.Column}) {}
.flexGrow(2)
.width('100%')
.backgroundColor('#FFFFFF')
// 功能按鈕、符號(hào)按鈕、數(shù)字按鈕
Flex({direction: FlexDirection.Column}) {}
.flexGrow(4)
.width('100%')
.backgroundColor('#E5E5E5')
}
.width('100%')
.height('100%')
.backgroundColor('#F5F5F5')
}
}

小結(jié)

這并不是完結(jié),而是開(kāi)始。本篇幅描述了從需求開(kāi)始一步步到代碼實(shí)現(xiàn);從設(shè)計(jì)圖到代碼實(shí)現(xiàn);從技術(shù)要點(diǎn)到代碼實(shí)現(xiàn)。從學(xué)到用,從用到學(xué),逐漸掌握ArkUI框架的ets項(xiàng)目開(kāi)發(fā),下一篇將繼續(xù)本篇幅的內(nèi)容。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

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

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2022-03-14 15:36:34

Row容器組件Column容器組件鴻蒙

2022-03-17 16:04:16

Text文本組件Button組件Column

2011-09-16 14:13:15

Windows7計(jì)算器

2017-07-18 14:28:04

HTMLCSSJS

2020-12-28 06:29:31

Bash互動(dòng)游戲Linux

2017-09-05 16:43:47

Electron桌面計(jì)算器

2022-07-11 16:19:22

css屬性鴻蒙

2023-02-27 16:40:19

ArkUI組件文件管理器

2021-01-12 06:42:50

Lua腳本語(yǔ)言編程語(yǔ)言

2024-01-31 08:33:06

C++編程計(jì)算器

2022-06-03 16:59:13

編程語(yǔ)言Awk

2016-12-12 13:41:37

iOS簡(jiǎn)易加法開(kāi)發(fā)

2010-01-15 19:12:36

Linux計(jì)算器

2022-03-02 15:35:57

UI界面容器組件鴻蒙

2010-01-21 11:13:29

Linux桌面計(jì)算器

2022-07-06 20:24:08

ArkUI計(jì)時(shí)組件

2022-07-04 16:34:46

流光按鈕Stack

2022-10-24 14:49:54

ArkUI心電圖組件

2021-12-10 15:05:41

鴻蒙HarmonyOS應(yīng)用

2021-12-10 15:02:47

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲欧美在线磁力| 成人激情校园春色| 欧美极品aⅴ影院| 污污免费网站| 精品国产91乱码一区二区三区 | 国产精品aaaa| 91麻豆成人久久精品二区三区| 日日夜夜精品一区| 国产精品精品国产| 国产三级欧美三级日产三级99| 欧美91看片特黄aaaa| 国产精品乱码| 丁香五六月婷婷久久激情| 玖玖玖视频精品| 国产精品无码免费专区午夜| 中文字幕亚洲第一| 欧美激情在线精品一区二区三区| 668精品在线视频| 中文字幕资源网在线观看| 中文成人av在线| 视频一区二区视频| 国产麻豆精品在线观看| 快色在线观看| 久久久人成影片一区二区三区| 久久网站最新地址| 日韩黄色网络| 日韩一二三区不卡| 免费日韩电影| 2018av男人天堂| 欧美一级爽aaaaa大片| 亚洲欧美中文在线视频| 中文字幕av在线一区二区三区| 日韩在线你懂的| 国产精品va在线观看视色| 少妇人妻互换不带套| 91精品黄色| 色噜噜狠狠色综合中国| 欧美私人啪啪vps| 亚洲大胆精品| 国产精品高清一区二区三区| 自拍av一区二区三区| 欧美亚洲黄色| av免费播放网址| 久久久国产精品免费| 久久66热偷产精品| 国产在线激情| 99国精产品一二二线| 91九色02白丝porn| 黑人巨大精品欧美一区免费视频 | 欧美国产日韩在线观看| 成人在线视频区| 国产不卡一区二区视频| 色婷婷av一区二区三区在线观看| 91视频.com| 2019中文字幕视频| 欧美伊人久久久久久久久影院| 8x8ⅹ拨牐拨牐拨牐在线观看| 亚洲精品白虎| 国产精品久久999| 亚洲天堂影视av| 五月婷婷综合网| 午夜精品视频网站| 亚洲午夜极品| 国产99久久| 第四色在线一区二区| 尤物网站在线| 青青青在线视频免费观看| 成人3d动漫一区二区三区91| 91av在线播放| 综合网中文字幕| 这里只有精品在线| 国产特级淫片高清视频| 色综合一区二区三区| 亚洲精品麻豆| av资源在线看片| 欧美女同在线观看| 国内视频一区| 午夜精品一区二区三区在线视| 亚洲成人免费观看| 成人中文字幕在线| 影音先锋在线一区| 国产精品成人3p一区二区三区| 97在线视频免费| 欧美日韩一区二区在线观看| 精品1区2区在线观看| 国产精品国产一区| 中文字幕在线视频观看| 国产精品极品美女在线观看免费| 国产精品毛片a∨一区二区三区| 欧美美女福利视频| 成人网站免费观看入口| 国产亚洲成精品久久| 国产成人在线电影| 精品免费av一区二区三区| 日韩电影免费观看高清完整| 欧美成人精品1314www| 日产国产高清一区二区三区| 天堂中文av在线资源库| 一本—道久久a久久精品蜜桃| 精品成人一区二区三区| 久久精品国产精品亚洲精品| 欧美日一区二区三区| 国产免费毛卡片| 久久这里只有精品视频首页| 久久久不卡网国产精品二区| 久久影视三级福利片| 亚洲社区在线| 国产区一区二区| 亚洲成人xxx| 成人精品在线视频观看| 成人激情自拍| 一区二区电影网| 久久久久久高清| 亚洲精品永久免费精品| 久久一留热品黄| 二吊插入一穴一区二区| 欧美日韩视频一区二区三区| 亚洲 自拍 另类小说综合图区| 久久99国产综合精品女同 | 日韩城人网站| 一区二区三区 日韩| 国产精品18久久久久久麻辣| 欧美日韩激情网| 狠狠干夜夜操| 都市激情亚洲色图| 三级欧美韩日大片在线看| 欧美日韩免费看片| 三级短视频在线| 国产精品国产精品| 精品香蕉在线观看视频一| 91麻豆精品一区二区三区| 久久精品国产亚洲夜色av网站| 在线中文字幕电影| 91九色在线观看视频| 国产精品久久久久高潮| 日韩三级中文字幕| 欧美韩日一区二区三区| 午夜日韩电影| 国产a亚洲精品| 轻轻色免费在线视频| 亚洲精品乱码视频| 美女少妇精品视频| 日本韩国欧美国产| 成人午夜免费视频| 欧美wwwww| 99精品国自产在线| 欧美巨乳在线| 日韩a∨精品日韩在线观看| 欧美激情中文字幕乱码免费| 欧美成人免费在线| 岛国毛片在线播放| 国产高清在线一区二区| 亚洲色图50p| 婷婷国产v国产偷v亚洲高清| 久久99精品久久久久久久久久久久| 老司机成人在线| 免费男女羞羞的视频网站在线观看| 少妇黄色一级片| 日韩中文不卡| 日本一区二区三区在线播放| 亚洲国产一区二区三区四区| 亚洲一区二区3| 国产成人精品一区二区三区网站观看| 久久社区一区| 成人亚洲精品| 污视频免费在线观看| 免费毛片aaaaaa| 999久久欧美人妻一区二区| 成人免费直播live| 欧美理论电影在线播放| 欧美一区二区三区四区久久| 亚洲免费观看高清完整版在线观看| 美女视频网站久久| 午夜国产欧美理论在线播放| 美女一区二区在线观看| 欧美黑人疯狂性受xxxxx野外| 国产精品久久一区二区三区不卡| 黄色一级二级三级| 欧美喷水视频| 中文在线a在线| 欧美高清中文字幕| 日本高清不卡视频| 91中文字精品一区二区| 最近中文字幕2019免费| 欧美日韩高清一区二区三区| 国产精品色噜噜| 成人一区二区三区| 日本麻豆一区二区三区视频| 中文字幕在线视频网| 精品国产一区av| 日韩午夜中文字幕| 欧美香蕉大胸在线视频观看| 国产精品免费观看视频| 国产精品一区二区三区www| 蜜桃91丨九色丨蝌蚪91桃色| 日韩片之四级片| 亚洲自拍欧美色图| 国产一区二区四区| 69xxxx欧美| 国产99精品|