0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ArkUI開(kāi)發(fā)實(shí)戰(zhàn):制作一個(gè)【簡(jiǎn)單計(jì)數(shù)器】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-08 18:05 ? 次閱讀

構(gòu)建第一個(gè)頁(yè)面

  1. 使用文本組件
    工程同步完成后,在 Project 窗口,點(diǎn)擊 entry > src > main > ets > pages ,打開(kāi) Index.ets 文件,可以看到頁(yè)面由 Row 、 ColumnText 組件組成。 index.ets 文件的示例如下:

    @Entry @Component struct Index {
    
      @State message: string = 'Hello World'
    
      build() {
        Row() {
          Column() {
            Text(this.message)
              .fontSize(50)
              .fontWeight(FontWeight.Bold)
          }
          .width('100%')
        }
        .height('100%')
      }
    }
    

    @Entry 修飾符表示一個(gè)頁(yè)面的入口,它需要在 main_pages.json 配置才可以在設(shè)備上正常顯示, @Component 修飾符表示 Index 是一個(gè)組件, @State 是一個(gè)狀態(tài)標(biāo)識(shí)符,當(dāng)它修飾的變量值改變時(shí)ArkUI開(kāi)發(fā)框架會(huì)調(diào)用 build() 方法進(jìn)行頁(yè)面的刷新。

  2. 添加按鈕
    在默認(rèn)頁(yè)面基礎(chǔ)上,我們添加一個(gè) Button 組件,作為按鈕接受用戶點(diǎn)擊的動(dòng)作,從而實(shí)現(xiàn)計(jì)數(shù)器自增操作。 " index.ets " 文件的示例如下:

    @Entry @Component struct Index {
    
      @State count: number = 0;                      // 狀態(tài)數(shù)據(jù)
    
      build() {
        Stack({alignContent: Alignment.BottomEnd}) { // 堆疊式布局
          Text(this.count.toString())                // 顯示文本
            .fontSize(50)                            // 文字大小
            .margin(50)                              // 外邊距
            .size({width: '100%', height: '100%'})   // 控件大小
    
          Button('+')                                // 顯示一個(gè)+按鈕
            .size({width: 80, height: 80})           // 按鈕大小
            .fontSize(50)                            // 按鈕文字大小
            .onClick(() = > {                         // 按鈕點(diǎn)擊事件
              this.count++;                          // count累加,觸發(fā)build()方法回調(diào)
            })
            .margin(50)
        }
        .width('100%')
        .height('100%')
      }
    }
    
  3. 打開(kāi)預(yù)覽器
    在編輯窗口右上角的側(cè)邊工具欄,點(diǎn)擊 Previewer ,然后點(diǎn)擊頁(yè)面加號(hào)按鈕,頁(yè)面運(yùn)行效果如下圖所示:
    2_1_3_1
    學(xué)習(xí)文檔參考:[docs.qq.com/doc/DUmN4VVhBd3NxdExK]

搜狗高速瀏覽器截圖20240326151547.png

根據(jù)運(yùn)行截圖,我們點(diǎn)擊了加號(hào)按鈕,觸發(fā)按鈕的 onClick 事件回調(diào),由于在回調(diào)里執(zhí)行了 count++ 操作導(dǎo)致了 count 的值發(fā)生了改變,又因?yàn)?count 被 @State 修飾符修飾,所以ArkUI開(kāi)發(fā)框架就會(huì)重新調(diào)用 build() 方法更新各組件的屬性值, Text 組件會(huì)更新 count 的值,然后頁(yè)面刷新,計(jì)數(shù)器的功能就實(shí)現(xiàn)了。

頁(yè)面的構(gòu)建流程

讀者可能會(huì)對(duì)上述示例的頁(yè)面刷新過(guò)程感興趣,筆者簡(jiǎn)單介紹一下,上述示例的頁(yè)面刷新過(guò)程可以分為兩個(gè)過(guò)程,一個(gè)是頁(yè)面渲染完畢沒(méi)有點(diǎn)擊按鈕過(guò)程,另一個(gè)是點(diǎn)擊點(diǎn)擊按鈕后頁(yè)面數(shù)據(jù)變化過(guò)程,筆者分別介紹一下這兩個(gè)過(guò)程:

  1. 頁(yè)面初次顯示過(guò)程
    ①、index.ets 源代碼通過(guò)編譯工具鏈編譯為帶有類型標(biāo)志的目標(biāo)文件,同時(shí)也包含了如何創(chuàng)建UI結(jié)構(gòu)信息的指令流。
    ②、通過(guò)跨語(yǔ)言調(diào)用并生成了 C++ 層面的 Component 樹(shù)(UI描述層)。
    ③、通過(guò) Component 樹(shù)進(jìn)一步生成 Element 樹(shù)。 Element 是 Component 的實(shí)例,表示一個(gè)具體的組件節(jié)點(diǎn),它形成的 Element 樹(shù)負(fù)責(zé)維持界面在整個(gè)運(yùn)行時(shí)的樹(shù)形結(jié)構(gòu),方便計(jì)算更新時(shí)的局部更新算法等。
    ④、對(duì)于每個(gè)可顯示的 Element 都會(huì)為其創(chuàng)建對(duì)應(yīng)的 RenderNode 。 RenderNode 負(fù)責(zé)一個(gè)節(jié)點(diǎn)的顯示信息,它形成的 Render 樹(shù)維護(hù)著整個(gè)界面渲染需要用到的信息,包括位置、大小、繪制命令等。后續(xù)的布局、繪制都是在 Render 樹(shù)上進(jìn)行的。
    ⑤、實(shí)現(xiàn)真正的渲染并顯示繪制結(jié)果。
  2. 點(diǎn)擊按鈕顯示過(guò)程
    ⑥、點(diǎn)擊屏幕,事件傳遞到組件上,組件的 onClick 事件方法被觸發(fā)執(zhí)行。
    ⑦、由于 onClick 事件方法中 @State 修飾的變量值改變了,相應(yīng)的 getter / setting 函數(shù)會(huì)被觸發(fā)。
    ⑧、狀態(tài)管理模塊定位出與之關(guān)聯(lián)的UI組件。
    ⑨、狀態(tài)管理模塊更新相應(yīng)的 Element 樹(shù)的信息。
    ⑩、狀態(tài)管理模塊更新相應(yīng)的 RenderNode 樹(shù)的渲染信息。
    ?、刷新界面并顯示繪制結(jié)果。

以上頁(yè)面整體構(gòu)建流程如下圖所示:

2_1_4

小結(jié)

通過(guò)簡(jiǎn)單計(jì)數(shù)器示例,讀者先了解一下 OpenHarmony 應(yīng)用的組件、頁(yè)面布局,點(diǎn)擊事件以及 @State 修飾符的作用,最后給簡(jiǎn)單介紹了一下 OpenHarmony 的頁(yè)面構(gòu)建流程。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2248

    瀏覽量

    94187
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2295

    瀏覽量

    42638
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3613

    瀏覽量

    15986
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙Flutter實(shí)戰(zhàn):07混合開(kāi)發(fā)

    # 鴻蒙Flutter實(shí)戰(zhàn):混合開(kāi)發(fā) 鴻蒙Flutter混合開(kāi)發(fā)主要有兩種形式。 ## 1.基于har 將flutter module
    發(fā)表于 10-23 16:00

    計(jì)數(shù)器同步和異步怎么判斷

    計(jì)數(shù)器同步和異步是數(shù)字電路設(shè)計(jì)中的個(gè)重要概念,它們?cè)诤芏鄳?yīng)用場(chǎng)景中都扮演著關(guān)鍵角色。 、計(jì)數(shù)器概述
    的頭像 發(fā)表于 07-23 11:14 ?437次閱讀

    用級(jí)聯(lián)觸發(fā)制作個(gè)簡(jiǎn)單計(jì)數(shù)器,輸出有延遲是怎么回事?

    如下圖所示,我正在嘗試用級(jí)聯(lián)觸發(fā)制作個(gè)簡(jiǎn)單計(jì)數(shù)器,以達(dá)到訓(xùn)練目的: 第
    發(fā)表于 05-29 07:25

    同步計(jì)數(shù)器和異步計(jì)數(shù)器的區(qū)別

    在數(shù)字電子領(lǐng)域中,計(jì)數(shù)器種用于統(tǒng)計(jì)脈沖信號(hào)數(shù)量的重要設(shè)備。其中,同步計(jì)數(shù)器和異步計(jì)數(shù)器是兩種不同類型的計(jì)數(shù)器,它們?cè)诠ぷ髟?、特性以及?yīng)
    的頭像 發(fā)表于 05-24 14:36 ?2944次閱讀

    鴻蒙ArkUI-X跨平臺(tái)開(kāi)發(fā):【 編寫(xiě)第一個(gè)ArkUI-X應(yīng)用】

    通過(guò)構(gòu)建個(gè)簡(jiǎn)單ArkUI頁(yè)面跳轉(zhuǎn)示例,快速了解資源創(chuàng)建引用,路由代碼編寫(xiě)和UI布局編寫(xiě)等應(yīng)用開(kāi)發(fā)流程。
    的頭像 發(fā)表于 05-21 17:36 ?585次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>-X跨平臺(tái)<b class='flag-5'>開(kāi)發(fā)</b>:【 編寫(xiě)第<b class='flag-5'>一個(gè)</b><b class='flag-5'>ArkUI</b>-X應(yīng)用】

    簡(jiǎn)單認(rèn)識(shí)脈沖計(jì)數(shù)器

    在數(shù)字電路和電子測(cè)量領(lǐng)域中,脈沖計(jì)數(shù)器作為種基本而重要的工具,其應(yīng)用十分廣泛。脈沖計(jì)數(shù)器,也被稱為脈沖頻率計(jì)或脈沖數(shù)計(jì),主要用于統(tǒng)計(jì)和測(cè)量輸入脈沖信號(hào)的頻率或數(shù)量。本文將詳細(xì)闡述脈沖計(jì)數(shù)器
    的頭像 發(fā)表于 05-15 17:08 ?1457次閱讀

    鴻蒙ArkUI:【從代碼到UI顯示的整體渲染流程】

    方舟開(kāi)發(fā)框架(簡(jiǎn)稱ArkUI)是鴻蒙開(kāi)發(fā)的UI框架,提供如下兩種開(kāi)發(fā)范式,我們 **只學(xué)聲明式開(kāi)發(fā)
    的頭像 發(fā)表于 05-13 16:06 ?726次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b>:【從代碼到UI顯示的整體渲染流程】

    鴻蒙開(kāi)發(fā)學(xué)習(xí):初探【ArkUI-X】

    **簡(jiǎn)單來(lái)說(shuō),ArkTS + ArkUI-X 對(duì)標(biāo)的框架為 flutter,次代碼,編譯為 native 全平臺(tái)運(yùn)行**
    的頭像 發(fā)表于 05-13 15:58 ?917次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開(kāi)發(fā)</b>學(xué)習(xí):初探【<b class='flag-5'>ArkUI</b>-X】

    鴻蒙ArkUI開(kāi)發(fā)實(shí)戰(zhàn):eTS版【笑話app】

    制作款笑話app,使用ArkUI
    的頭像 發(fā)表于 03-25 16:04 ?395次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b><b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>:eTS版【笑話app】

    鴻蒙實(shí)戰(zhàn)項(xiàng)目開(kāi)發(fā):【短信服務(wù)】

    環(huán)境搭建 ? 《鴻蒙開(kāi)發(fā)基礎(chǔ)》 ArkTS語(yǔ)言 安裝DevEco Studio 運(yùn)用你的第一個(gè)ArkTS應(yīng)用 ArkUI聲明式UI開(kāi)發(fā) .…
    發(fā)表于 03-03 21:29

    計(jì)數(shù)器怎么用 計(jì)數(shù)器的作用有哪些

    計(jì)數(shù)器種被廣泛應(yīng)用于各個(gè)領(lǐng)域的實(shí)用工具,在我們的日常生活中隨處可見(jiàn)。無(wú)論是進(jìn)行時(shí)間統(tǒng)計(jì),協(xié)助工作任務(wù)的完成,還是用于科學(xué)研究和編程技術(shù),在各個(gè)領(lǐng)域都起到了重要的作用。本文將詳細(xì)介紹計(jì)數(shù)器
    的頭像 發(fā)表于 02-03 10:04 ?4738次閱讀

    鴻蒙ArkUI開(kāi)發(fā)-Tabs組件的使用

    鴻蒙ArkUI開(kāi)發(fā)-Tabs組件的使用
    的頭像 發(fā)表于 01-19 16:01 ?1619次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkUI</b><b class='flag-5'>開(kāi)發(fā)</b>-Tabs組件的使用

    同步計(jì)數(shù)器和異步計(jì)數(shù)器各有什么特點(diǎn)

    : 同步計(jì)數(shù)器種同步機(jī)制,用于控制多個(gè)線程的順序執(zhí)行。它們使用共享的計(jì)數(shù)器,并在計(jì)數(shù)器達(dá)到特定值時(shí)觸發(fā)線程的執(zhí)行。下面是同步計(jì)數(shù)器的幾個(gè)
    的頭像 發(fā)表于 12-15 10:49 ?1695次閱讀

    4017計(jì)數(shù)器的工作原理

    中,我們將詳細(xì)介紹4017計(jì)數(shù)器的工作原理。 4017計(jì)數(shù)器的內(nèi)部結(jié)構(gòu)非常復(fù)雜,但核心的原理相對(duì)簡(jiǎn)單。它包含個(gè)時(shí)鐘輸入引腳(CLK),
    的頭像 發(fā)表于 12-15 09:24 ?3843次閱讀

    同步計(jì)數(shù)器和異步計(jì)數(shù)器的區(qū)別主要在哪里

    、應(yīng)用等方面。 、工作原理 同步計(jì)數(shù)器:同步計(jì)數(shù)器的工作原理是,在時(shí)鐘信號(hào)的驅(qū)動(dòng)下,對(duì)輸入的二進(jìn)制數(shù)進(jìn)行加法或減法運(yùn)算,從而得到計(jì)數(shù)值。在每個(gè)時(shí)鐘周期內(nèi),同步
    的頭像 發(fā)表于 12-13 14:54 ?8634次閱讀