第一個ArkTS項目實踐-鴻蒙ArkTS

第一個ArkTS項目實踐-ArkTS

  • 第一個ArkTS項目實踐-ArkTS
    • 自定義組件的組成
    • 配置屬性與布局
      • 配置屬性
      • 布局
    • 改變組件狀態
    • 循環渲染列表數據
    • 代碼
      • ToDoItem組件
      • ToDoList頁面
    • 效果
    • 參考資料

第一個ArkTS項目實踐-ArkTS

本篇文章是官網上視頻對ArkTS開發實踐的第一個視頻,主要是引導大家對ArkTS的一個了解。

開發文檔官網

在這里插入圖片描述

自定義組件的組成

ArkTS通過struct聲明組件名,并通過@Component和@Entry裝飾器,來構成一個自定義組件。

使用@Entry和@Component裝飾的自定義組件作為頁面的入口,會在頁面加載時首先進行渲染。

import { ToItem } from '../view/ToItem'// 表示當前組件是一個主頁面
@Entry
// 表示當前是一個組件
@Component
struct ToDoList {build() {// 頁面內容...}
}

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ElcBw0BK-1692021004323)(D:\work\鴻蒙開發APP\第一個ArkTs項目實踐.assets\image-20230814205246074.png)]

圖中有重復的內容顯示,可以通過創建組件配合ForEach來完成。

// 組件注釋
@Component
export struct  ToItem{build(){}
}

在這里插入圖片描述

圖片中的選中和未選擇狀態可以通過定義變量進行在樣式中判斷。

@Component
export struct  ToItem{private content:string;// 定義當前狀態@State isComplete: boolean = false;@Builder labelIcon(icon) {Image(icon).width(20)}build(){Row(){// 通過判斷當前的狀態進行顯示指定圖片效果if(this.isComplete){this.labelIcon($r('app.media.radio_on'))}else {this.labelIcon($r('app.media.radio_off'))}// 文字...}}
}

配置屬性與布局

配置屬性

自定義組件的組成使用基礎組件和容器組件等內置組件進行組合。但有時內置組件的樣式并不能滿足我們的需求,ArkTS提供了屬性方法用于描述界面的樣式。屬性方法支持以下使用方式:

常量傳遞

例如使用fntSize(50)來配置字體大小

Text('Hello World').fontSize(50)

變量傳遞

通過定義變量可以在當前組件內通過 this 進行拿取到對應變量的值。

@Component
export struct  ToItem{// 定義變量private content:string;// 定義變量@State isComplete: boolean = false;
}
Text('Hello World').frontSize(this.size)

鏈式調用

在多個屬性時,ArkTS提供了鏈式調用的方式,通過’.'方式連續配置。

Text('Hello World').fontSize(this.size)// 寬度默認單位vp.width(100)// 高度默認單位vp.height(100)

表達式傳遞

屬性中還可傳入普通表達式以及三目運算表達式。

Text('Hello World').fontSize(this.size).width(this.count + 100).height(this.count % 2 === 0 ? 100 : 200)

內置枚舉類型

ArkTS中提供了內置枚舉類型,如Color,FontWeight等,例如設置fontColor改變字體顏色為紅色,并私有fontWeight為加粗。

Text('Hello World').fontSize(this.size).width(this.count + 100).height(this.count % 2 === 0 ? 100 : 200)// 設置字體顏色.fontColor(Color.Red)// 設置字體粗細.fontWeight(FontWeight.Bold)

布局

ArkTS中的布局方式有兩種分別時水平和垂直。

布局公共屬性

  • alignItems

    在Row上設置子組件在垂直方向上的對齊格式。
    默認值:VerticalAlign.Center

    VerticalAlign.Top

    VerticalAlign.Bottom

    在Column上設置子組件的水平方向上的對齊格式。

    默認值:HorizontalAlign.Center

    HorizontalAlign.Start

    HorizontalAlign.End

  • justifyContent

    在Row上設置子組件在水平方向上的對齊格式。

    在Column上設置子組件垂直方向上的對齊格式。

    默認值:FlexAlign.Start

    FlexAlign.Center 居中對齊

    FlexAlign.End

Row水平布局

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HfFBfJw6-1692021004324)(D:\work\鴻蒙開發APP\第一個ArkTs項目實踐.assets\image-20230814211205501.png)]

Row(){Image($r('app.media.radio_on'))...Text(this.content)...}
}

Column垂直布局

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VRt49LPt-1692021004324)(D:\work\鴻蒙開發APP\第一個ArkTs項目實踐.assets\image-20230814211359185.png)]

Column() {Text('待辦')....  ForEach(this.totalTasks, (item) => {ToItem({content: item})},....)}

改變組件狀態

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-hXk9lGmc-1692021004325)(D:\work\鴻蒙開發APP\第一個ArkTs項目實踐.assets\image-20230814212726895.png)]

在實際的開發中由于交互的需求,需求頁面中的內產生一個狀態的改變。需要通過定義變量完成不過需要加上 @State 注解。

聲明式UI的特點就是UI是隨數據更改而自動刷新的,我們這里定義了一個類型為boolean的變量isComplete,其被@State裝飾后,框架內建立了數據和視圖之間的綁定,其值的改變影響UI的顯示。

// @State 裝飾器的作用主要是在數據發生改變時能調用頁面的build進行頁面UI更新
@State isComplete : boolean = false;

由于兩個Image的實現具有大量重復代碼,ArkTS提供了@Builder裝飾器,來修飾一個函數,快速生成布局內容,從而可以避免重復的UI描述內容。這里使用@Bulider聲明了一個labelIcon的函數,參數為url,對應要傳給Image的圖片路徑。

@Component
export struct  ToItem{@State isComplete: boolean = false;// @Builder 用法大概是通過 this 來調用當前構建好的框架去傳入內容,完成一個模板的填寫成類似的功能@Builder labelIcon(icon) {Image(icon).width(20)}build(){Row(){if(this.isComplete){this.labelIcon($r('app.media.radio_on'))}else {this.labelIcon($r('app.media.radio_off'))}...}}
}

為了讓待辦項帶給用戶的體驗更符合已完成的效果,給內容的字體也增加了相應的樣式變化,這里使用了三目運算符來根據狀態變化修改其透明度和文字樣式,如opacity是控制透明度,decoration是文字是否有劃線。通過isComplete的值來控制其變化。

  • TextDecorationType.None** 文字沒有任何效果
  • TextDecorationType.LineThrough 文字中間橫穿一條線
  • TextDecorationType.Underline 文字底部一條線
  • TextDecorationType.Overline 文字頂部一條線
Text(this.content).fontSize(20).margin({left:15}).opacity(this.isComplete ? 0.4 : 1).decoration({type: this.isComplete ? TextDecorationType.LineThrough : TextDecorationType.None})

最后,為了實現與用戶交互的效果,在組件上添加了onClick點擊事件,當用戶點擊該待辦項時,數據isComplete的更改就能夠觸發UI的更新。

@Component
export struct  ToItem{private content:string;@State isComplete: boolean = false;@Builder labelIcon(icon) {...}build(){Row(){if(this.isComplete){this.labelIcon($r('app.media.radio_on'))}else {this.labelIcon($r('app.media.radio_off'))}...}....onClick(() => {this.isComplete = !this.isComplete})}
}

循環渲染列表數據

我們通過創建好的ToDoItem組件開發,通過ForEach循環顯示多條數據。

totalTasks: Array<string> = ["早餐晨練","準備早餐","閱讀名著","學習ArkTs","看劇輕松"]

代碼

ToDoItem組件

@Component
export struct  ToItem{private content:string;@State isComplete: boolean = false;@Builder labelIcon(icon) {Image(icon).width(20)}build(){Row(){if(this.isComplete){this.labelIcon($r('app.media.radio_on'))}else {this.labelIcon($r('app.media.radio_off'))}Text(this.content).fontSize(20).margin({left:15}).opacity(this.isComplete ? 0.4 : 1).decoration({type: this.isComplete ? TextDecorationType.Overline : TextDecorationType.None})}.backgroundColor("#fff").borderRadius(24).padding(25).margin(10).width("93%").onClick(() => {this.isComplete = !this.isComplete})}
}

ToDoList頁面

import { ToItem } from '../view/ToItem'
@Entry
@Component
struct ToDoList {totalTasks: Array<string> = ["早餐晨練","準備早餐","閱讀名著","學習ArkTs","看劇輕松"]build() {Row() {Column() {Text('待辦').fontSize(28).fontWeight(FontWeight.Bold).margin({top:30,bottom: 20}).width("80%")ForEach(this.totalTasks, (item) => {ToItem({content: item})})}.height("100%").width("100%").backgroundColor("#efefef")}.justifyContent(FlexAlign.)}
}

效果

在這里插入圖片描述

參考資料

文檔:

? 開發文檔官網

? 官網文檔

? https://blog.csdn.net/qq_57985179/article/details/128953555

視頻:

? 官網視頻/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42490.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42490.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42490.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Matplotlib數據可視化(三)

目錄 1.繪圖的填充 1.1 曲線下方區域的填充 1.2 填充部分區域 1.3 兩條曲線之間的區域填充 1.4 直接使用fill進行填充 1.繪圖的填充 繪圖的填充可以調用fill_between()或fill()進行填充。 1.1 曲線下方區域的填充 x np.linspace(0,1,500) y np.sin(3*np.pi*x)*np.exp…

【C語言】每日一題(找到所有數組中消失的數字)

找到所有數組中消失的數字&#xff0c;鏈接奉上。 這里簡單說一下&#xff0c;因為還沒有接觸到動態內存&#xff0c;數據結構&#xff0c;所以知識有限&#xff0c;也是盡力而為&#xff0c;結合題庫的評論區找到了適合我的解法&#xff0c;以后有機會&#xff0c;會補上各種…

如何在HTML中使用React

突發奇想 查了查真的可以,官方文檔: 在網站中添加 React – React 開始 引入js <!-- 開發環境使用 --><script src"https://unpkg.com/react18/umd/react.development.js"></script><script src"https://unpkg.com/react-dom18/umd/reac…

穿越數字奇境:探尋元宇宙中的科技奇跡

隨著科技的迅速發展&#xff0c;元宇宙正逐漸成為一個備受關注的話題&#xff0c;它不僅是虛擬現實的延伸&#xff0c;更是將現實世界與數字世界融合的未來典范。在這個神秘而充滿活力的數字奇境中&#xff0c;涉及了眾多領域和技術&#xff0c;為我們呈現出了一個無限的創新和…

創建Azure資源鎖

鎖的介紹 在Azure中&#xff0c;資源鎖是一種用于保護訂閱、資源組或者單個資源的機制。它可以防止對受鎖定的資源進行刪除或修改操作&#xff0c;幫助確保資源的連續可用性和安全性。 Azure中的資源鎖可以分為兩種類型&#xff1a; 刪除鎖&#xff08;CanNotDelete&#xf…

elementUI遇到的問題記錄

一、 組件&#xff1a;el-table 問題&#xff1a;使用動態數據創建多級表頭后&#xff0c;刷新頁面時&#xff0c;table行會串行&#xff0c;某些列丟失&#xff0c;圖片列未顯示圖片 解決方案&#xff1a;給el-table增加key <el-table :key"${Matn.random()}${ite…

javaScript:模板字符串讓你忘記字符串拼接

目錄 一.前言 二.模板字符串的使用 1.介紹 2.模板字符串 支持換行 模板字符串更適合元素寫入 innerHTML模板字符串寫法 3.模板字符串中&#xff0c;可以運行表達式 4.模板字符串中可以運行函數 三.總結 語法&#xff1a; 多行字符串&#xff1a; 變量插值&#xff1a; …

μCOS-Ⅲ_簡介

μCOS-Ⅲ簡介 文章目錄 μCOS-Ⅲ簡介前言一、什么是 C/OS-III&#xff1f;二、C/OS-III的特點三、C/OS-III的版本和參考資料1、C/OS-III版本2、C/OS-III源碼獲取3、C/OS-III參考資料 四、C/OS-III源碼簡介總結 前言 μcos-III是一個可以基于ROM運行的、可裁剪的、搶占式、實時…

uniapp Vue 使用 sip.js進行語音通話視頻通話

下載或者安裝 sip.js 到 uniapp 項目&#xff0c;APP 端在 menifest.json 中配置麥克風權限 menifest.json 中 app 權限配置選中&#xff1a; android.permission.RECORD_AUDIO android.permission.MODIFY_AUDIO_SETTINGS sip.js 低版本 如 V0.13.0 版本的寫法 <template&…

latex 筆記:cs論文需要的排版格式

主要針對英文文獻 1 基本環境 連字符 不同長度的"-"表示不同含義。 一個"-"長度的連字符用于詞中兩個"-"長度的連字符常用于制定范圍三個"-"長度的連字符是破折號數學中的負數要用數學環境下的-得到 強調 在正式文章中, 通常不…

神經網絡基礎-神經網絡補充概念-48-rmsprop

概念## 標題 RMSProp&#xff08;Root Mean Square Propagation&#xff09;是一種優化算法&#xff0c;用于在訓練神經網絡等機器學習模型時自適應地調整學習率&#xff0c;以加速收斂并提高性能。RMSProp可以有效地處理不同特征尺度和梯度變化&#xff0c;對于處理稀疏數據和…

Open3D點云數據處理(二十):最小二乘直線擬合(三維)

文章目錄 1 最小二乘三維直線擬合原理2 代碼實現3 直線擬合的評估指標4 計算擬合的評估指標5 np.linalg.lstsq() 函數詳解專欄目錄:Open3D點云數據處理(Python) 1 最小二乘三維直線擬合原理 最小二乘三維直線擬合的原理是通過最小化數據點到直線距離的平方和,找到最優的直…

ARM64 程序調用標準

ARM64 程序調用標準 1 Machine Registers1.1 General-purpose Registers1.2 SIMD and Floating-Point Registers 2 Processes, Memory and the Stack2.1 Memory Addresses2.2 The Stack2.2.1 Universal stack constraints2.2.2 Stack constraints at a public interface 2.3 Th…

【C語言】字符串和內存函數的介紹 -- 詳解

重點介紹處理字符和字符串的庫函數的使用和注意事項。 C語言中對字符和字符串的處理很是頻繁&#xff0c;但是C語言本身是沒有字符串類型的&#xff0c;字符串通常放在常量字符串中或者字符數組中。字符串常量適用于那些對它不做修改的字符串函數。 一、求字符串長度?strlen …

python的requests庫使用

安裝 pip install requests方法 requests.get() 發起get請求調用 查詢 requests.post() 發起post請求調用 報錯 requests.put() 發起put請求調用 修改 requests.delete() 發起delete請求調用 刪除 requests.session() 獲取requests的session對象 requests.session().request(…

【Rust】Rust學習 第十四章進一步認識 Cargo 和 Crates.io

本章會討論 Cargo 其他一些更為高級的功能&#xff0c;我們將展示如何&#xff1a; 使用發布配置來自定義構建將庫發布到 crates.io使用工作空間來組織更大的項目從 crates.io 安裝二進制文件使用自定義的命令來擴展 Cargo Cargo 的功能不止本章所介紹的&#xff0c;關于其全…

云積天赫|AIGC+營銷的排頭兵

AIGC生成式人工智能&#xff0c;正逐漸成為人們關注的焦點。AIGC的出現&#xff0c;標志著人工智能已經進入了一個全新的時代。AIGC的出現&#xff0c;也為營銷行業帶來了新的活力。那么企業該怎么利用這次AIGC浪潮&#xff0c;成為AIGC營銷的排頭兵呢&#xff1f;      “…

【JavaScript】使用js實現滑塊驗證碼功能與瀏覽器打印

滑塊驗證碼 效果圖&#xff1a; 實現思路&#xff1a; 根據滑塊的最左側點跟最右側點&#xff0c; 是否在規定的距離內【頁面最左側為原點】&#xff0c;來判斷是否通過 html代碼&#xff1a; <!DOCTYPE html> <html><head><title>滑動圖片驗證碼&…

Python爬蟲常用:谷歌瀏覽器驅動——Chromedriver 插件安裝教程

前言 大家早好、午好、晚好吖 ? ~歡迎光臨本文章 我們在做爬蟲的時候經常要使用谷歌瀏覽器驅動&#xff0c;今天分享下這個Chromedriver 插件的安裝方法。 話不多說&#xff0c;直接開搞&#xff0c;如果有什么疑惑/資料需要的可以點擊文章末尾名片領取源碼 第一步、打開谷…

使用Dockker創建vwas容器時報錯的解決方法

執行命令 docker run -it -d -p 13443:3443 --cap-add LINUX_IMMUTABLE secfa/docker-awvs沒有詳細看報錯之前找了各種各樣的解決辦法&#xff0c;都無法解決。因此以后在看報錯提示的時候耐心一點看關鍵詞Error 后來才發現啟動vwas時docker報了這個錯&#xff1a; OSError: …