鴻蒙應用開發ArkTS基礎組件的使用

語雀知識庫地址:語雀HarmonyOS知識庫
飛書知識庫地址:飛書HarmonyOS知識庫


本文示例代碼地址:Gitee 倉庫地址

嗨,各位好呀,我是小白

上一篇文章我為大家介紹了如何使用 ArkTS 開發鴻蒙應用,對 HarmonyOS 項目代碼結構做了初步的介紹
還沒看過的小伙伴可以先復習一下,對接下來的內容會有很大的幫助

淺析HarmonyOS開發語言ArkTS

從上面的案例中,很容易就能看出,開發一個鴻蒙應用實際上就是使用 ArkTS 提供的各個組件來組合成一個頁面
那么,要熟練的使用 ArkTS 提供的組件就顯得尤為重要
這篇文章就向大家介紹一些 ArkTS 常用的基礎組件

Image——圖片組件

Image 為圖片組件,常用于在應用中顯示圖片

Image 支持加載 PixelMap、ResourceStr 和 DrawableDescriptor 類型的數據源,支持 png、jpg、bmp、svg 和 gif 類型的圖片格式

定義方式
Image(src: string | Resource | media.PixelMap)

其入參需要傳入一個圖片源,參數名為 src ,參數類型是 union 聯合類型,支持字符串地址、像素圖以及本地圖片

參數使用
  1. string:該方式通常用來加載網絡圖片,也可以加載本地資源,比如下面這種寫法
// 加載網絡資源
Image('https://developer.huawei.com/images/logo-developer-header.svg')
// 加載本地資源 創建文件夾,將本地圖片放入ets文件夾下的任意位置,Image組件引入本地圖片路徑,即可顯示圖片(根目錄為ets文件夾)
Image('images/view.jpg')

效果如下

image.png

在這里需要注意的是,當使用該方式獲取網絡上的圖片資源時,在本地預覽是可以進行展示的,但是當使用模擬器進行調試時,使用該方式獲取的網絡資源是無法展示的,這是因為該方式需要使用網絡權限,所以我們可以在當前模塊的 module.json5 配置文件的 module 標簽下加入以下代碼即可

"requestPermissions": [{"name": "ohos.permission.INTERNET"}
]
  1. PixelMap:這種方式可以用來加載像素圖,常用于圖片編輯的場景
  2. Resource:加載本地圖片,使用資源格式可以跨包/跨模塊引入圖片,resources文件夾下的圖片都可以通過 $r 資源接口讀取到并轉換到 Resource 格式,推薦使用
Image($r('app.media.icon'))
Image($rawfile('icon.png'))

可以看到,使用 Resource 類型加載圖片時,有兩種寫法,這兩種寫法所讀取的文件目錄是不同的

  • 使用 $r() 方式所讀取的目錄是 src/main/resources/base/media 該目錄下的文件,這種方式不需要寫文件的后綴名
  • 使用 $rawfile() 方式讀取的目錄是 src/main/resources/rawfile 該目錄下的文件,這種方式必須將文件的后綴名寫上,否則就會報錯 (如果沒有這個文件夾,手動創建即可)
  1. 媒體庫文件:即手機內部文件,支持file://路徑前綴的字符串,用于訪問通過媒體庫提供的圖片路徑
  2. base64:路徑格式為 data:image/[png | jpeg | bmp | webp]; base64,[base64 data],其中 [base64 data] 為 Base64 字符串數據。Base64 格式字符串可用于存儲圖片的像素數據,在網頁上使用較為廣泛

效果如下
image.png

設置屬性

Image 作為基本組件,除了有通用屬性 width()、height()、padding() 等,還有其自身所擁有的屬性

Image($r('app.media.car')).alt($r('app.media.icon')).width('50%').height(70).borderRadius(10).interpolation(ImageInterpolation.High)

其中

  • alt 為圖片加載時顯示的占位圖,支持本地圖片(png、jpg、bmp、svg 和 gif 類型),不支持網絡圖片
  • borderRadius 為圖片設置圓角,數值越大,圖片的圓角就越大
  • interpolation 設置圖片的插值效果,即減輕低清晰度圖片在放大顯示時出現的鋸齒問題,可以為數值,也可以使用枚舉值

image.png

設置事件

onComplete:圖片數據加載成功和解碼成功時均觸發該回調,返回成功加載的圖片尺寸

onComplete(callback: (event?: { width: number, height: number, componentWidth: number, componentHeight: number, loadingStatus: number }) => void)
  • loadingStatus 參數用于返回圖片加載成功的狀態值。返回的狀態值為0時,表示圖片數據加載成功。返回的狀態值為1時,表示圖片解碼成功

onError:圖片加載異常時觸發該回調

onError(callback: (event?: { componentWidth: number, componentHeight: number , message: string }) => void)

onFinish:當加載的源文件為帶動效的 svg 格式圖片時,svg 動效播放完成時會觸發這個回調。如果動效為無限循環動效,則不會觸發這個回調。僅支持svg格式的圖片

onFinish(event: () => void)

Text/Span——文本組件

定義方式
Text(content?: string | Resource)
Span(value: string | Resource)

在 Text 中套用 Span 組件時,Span 的內容會覆蓋掉 Text 的內容

參數使用
  • string:傳入的內容即為所顯示的內容
Text('Hello World')

image.png

  • Resource:該方式傳入的內容為當前系統語言所對應文件中的數據值
Text($r('app.string.module_desc'))

image.png

這里需要注意的是,$r 方式默認是根據系統的語言來匹配讀取對應語言文件夾下 /element/string.json 文件中對應的值,如果都匹配不到的話,則讀取的是 /resources/base/element/string.json,因此,在使用此方式讀取值的時候,需要在每種系統語言對應的目錄文件中都添加相同 key 的數據,否則會報錯

image.png

設置屬性

Text 除了通用的屬性外,其自身也有許多屬性可以設置

示例 1
// 單行文本
Text('textAlign').fontSize(15).fontColor('#36D').fontWeight(FontWeight.Bold).padding({top:5, bottom:5})
Text('TextAlign set to Center.').textAlign(TextAlign.Center).fontSize(12).border({ width: 1 }).padding(10).width('100%')
Text('TextAlign set to Start.').textAlign(TextAlign.Start).fontSize(12).border({ width: 1 }).padding(10).width('100%')
Text('TextAlign set to End.').textAlign(TextAlign.End).fontSize(12).border({ width: 1 }).padding(10).width('100%')// 多行文本
Text('This is the text content with textAlign set to Center.').textAlign(TextAlign.Center).fontSize(12).border({ width: 1 }).padding(10).width('100%')
Text('This is the text content with textAlign set to Start.').textAlign(TextAlign.Start).fontSize(12).border({ width: 1 }).padding(10).width('100%')
Text('This is the text content with textAlign set to End.').textAlign(TextAlign.End).fontSize(12).border({ width: 1 }).padding(10).width('100%')// 文本超長時顯示方式
Text('TextOverflow+maxLines').fontSize(15).fontColor('#36D').fontWeight(FontWeight.Bold).padding({top:5, bottom:5})
// 超出maxLines截斷內容展示
Text('This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content. This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content.').textOverflow({ overflow: TextOverflow.Clip }).maxLines(1).fontSize(12).border({ width: 1 }).padding(10)// 超出maxLines展示省略號
Text('This is set textOverflow to Ellipsis text content This is set textOverflow to Ellipsis text content.'.split('').join('\u200B')).textOverflow({ overflow: TextOverflow.Ellipsis }).maxLines(1).fontSize(12).border({ width: 1 }).padding(10)Text('lineHeight').fontSize(15).fontColor('#36D').fontWeight(FontWeight.Bold).padding({top:5, bottom:5})
Text('This is the text with the line height set. This is the text with the line height set.').fontSize(12).border({ width: 1 }).padding(10)
Text('This is the text with the line height set. This is the text with the line height set.').fontSize(12).border({ width: 1 }).padding(10).lineHeight(20)

效果如下:

image.png
其中:

  • textAlign:設置文本段落在水平方向的對齊方式,默認值:TextAlign.Start,可選值:TextAlign.Start、TextAlign.Center、TextAlign.End
  • textOverflow:設置文本超長時的顯示方式。默認值:{overflow: TextOverflow.Clip}
  • lineHeight:設置文本的文本行高,設置值不大于 0 時,不限制文本行高,自適應字體大小,Length 為 number 類型時單位為fp
示例 2
  Text('decoration').fontSize(15).fontColor('#36D').fontWeight(FontWeight.Bold).padding({top:5, bottom:5})Text('This is the text content with the decoration set to LineThrough and the color set to Red.').decoration({type: TextDecorationType.LineThrough,color: Color.Red}).fontSize(12).border({ width: 1 }).padding(10).width('100%')Text('This is the text content with the decoration set to Overline and the color set to Red.').decoration({type: TextDecorationType.Overline,color: Color.Red}).fontSize(12).border({ width: 1 }).padding(10).width('100%')Text('This is the text content with the decoration set to Underline and the color set to Red.').decoration({type: TextDecorationType.Underline,color: Color.Red}).fontSize(12).border({ width: 1 }).padding(10).width('100%')// 文本基線偏移Text('baselineOffset').fontSize(15).fontColor('#36D').fontWeight(FontWeight.Bold).padding({top:5, bottom:5})Text('This is the text content with baselineOffset 0.').baselineOffset(0).fontSize(12).border({ width: 1 }).padding(10).width('100%')Text('This is the text content with baselineOffset 30.').baselineOffset(30).fontSize(12).border({ width: 1 }).padding(10).width('100%')Text('This is the text content with baselineOffset -20.').baselineOffset(-20).fontSize(12).border({ width: 1 }).padding(10).width('100%')// 文本字符間距Text('letterSpacing').fontSize(15).fontColor('#36D').fontWeight(FontWeight.Bold).padding({top:5, bottom:5})Text('This is the text content with letterSpacing 0.').letterSpacing(0).fontSize(12).border({ width: 1 }).padding(10).width('100%')Text('This is the text content with letterSpacing 3.').letterSpacing(3).fontSize(12).border({ width: 1 }).padding(10).width('100%')Text('This is the text content with letterSpacing -1.').letterSpacing(-1).fontSize(12).border({ width: 1 }).padding(10).width('100%')Text('textCase').fontSize(15).fontColor('#36D').fontWeight(FontWeight.Bold).padding({top:5, bottom:5})Text('This is the text content with textCase set to Normal.').textCase(TextCase.Normal).fontSize(12).border({ width: 1 }).padding(10).width('100%')// 文本全小寫展示Text('This is the text content with textCase set to LowerCase.').textCase(TextCase.LowerCase).fontSize(12).border({ width: 1 }).padding(10).width('100%')// 文本全大寫展示Text('This is the text content with textCase set to UpperCase.').textCase(TextCase.UpperCase).fontSize(12).border({ width: 1 }).padding(10)

效果如下

image.png
其中:

  • decoration:設置文本裝飾線樣式及其顏色。默認值:{type: TextDecorationType.None,color:Color.Black}
  • baselineOffset:設置文本基線的偏移量,默認值0。設置該值為百分比時,按默認值顯示
  • letterSpacing:設置文本字符間距。默認值0。設置該值為百分比時,按默認值顯示
  • textCase:設置文本大小寫。默認值:TextCase.Normal

TextInput/TextArea——文本輸入

定義方式
TextArea(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextAreaController})
TextInput(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextInputController})
參數使用
  • placeholder:
TextInput({placeholder:'placeholder 占位語'})
TextArea({placeholder:'placeholder占位語placeholder占位語placeholder占位語'})

image.png

  • text:
TextInput({text:'為TextInput設置默認值'})
TextArea({text:'我是TextArea我是TextArea我是TextArea我是TextArea'})

image.png
當 placeholder 與 text 同時存在時,placeholder 的值將會被 text 的內容所覆蓋

設置屬性
TextInput({ text: this.text, placeholder: 'input your word...', controller: this.controller }).placeholderColor(Color.Grey).placeholderFont({ size: 14, weight: 400 }).caretColor(Color.Blue).width(400).height(40).margin(20).fontSize(14).fontColor(Color.Black).inputFilter('[a-z]', (e) => {console.log(JSON.stringify(e))}).onChange((value: string) => {this.text = value})
Text(this.text)
Button('Set caretPosition 1').margin(15).onClick(() => {// 將光標移動至第一個字符后this.controller.caretPosition(1)})
// 密碼輸入框
TextInput({ placeholder: 'input your password...' }).width(400).height(40).margin(20).type(InputType.Password).maxLength(9).showPasswordIcon(true)
// 內聯風格輸入框
TextInput({ placeholder: 'inline style' }).width(400).height(50).margin(20).borderRadius(0).style(TextInputStyle.Inline).copyOption(CopyOptions.LocalDevice).textAlign(TextAlign.Start)

image.png
其中:

  • placeholderColor:設置placeholder文本顏色
  • placeholderFont:設置placeholder文本樣式
  • caretColor:設置輸入框光標顏色
  • inputFilter:正則表達式,匹配表達式的輸入允許顯示,不匹配的輸入將被過濾。目前僅支持單個字符匹配,不支持字符串匹配。其中 value 設置正則表達式,error 設置正則匹配失敗時,返回被過濾的內容
  • type:輸入框的類型,默認是 InputType.Normal
  • maxLength:設置文本的最大輸入字符數
  • showPasswordIcon:當 type 屬性為 InputType.Password 時,輸入框末尾的圖標是否顯示
  • style:設置輸入框為默認風格或內聯輸入風格
  • copyOption:設置輸入的文本是否可復制
  • textAlign:設置輸入文本在輸入框中的對齊方式
設置事件
  • onChange(callback: (value: string) => void):輸入內容發生變化時的回調函數
  • onSubmit(callback: (enterKey: EnterKeyType) => void):按下輸入法回車鍵觸發該回調,返回值為當前輸入法回車鍵的類型
  • onCopy(callback:(value: string) => void):長按輸入框內部區域彈出剪貼板后,點擊剪切板復制按鈕,觸發該回調

Button——按鈕

定義方式
Button(options?: {type?: ButtonType, stateEffect?: boolean})
Button(label?: string, options?: { type?: ButtonType, stateEffect?: boolean })
參數使用
  • label:按鈕文本內容
Button('按鈕文本內容 label')

image.png

Button('這是一個按鈕-正常', { type: ButtonType.Normal, stateEffect: true })
Button('這是一個按鈕-膠囊', { type: ButtonType.Capsule, stateEffect: true })
Button('Ok-圓', { type: ButtonType.Circle, stateEffect: true })
  • options-type:描述按鈕顯示樣式
  • options-stateEffect:按鈕按下時是否開啟按壓態顯示效果,當設置為 false 時,按壓效果關閉。當開啟按壓態顯示效果,設置狀態樣式時,會基于狀態樣式設置完成后的背景色再進行顏色疊加

image.png

設置屬性

Button 組件的屬性在通用屬性中均已支持

設置事件

Button 組件的事件在通用事件中均已支持

結語

除了以上所列舉的 Image、Text/Span、TextInput/TextArea、Button 組件外,ArkTS 還支持了 Menu(菜單)、Slider(滑塊)、Radio(單選)、CheckBox(復選框)、Progress(進度條) 等我們在手機上所能看到的組件,這些組件的使用方式大同小異,無需特殊記憶,在需要使用時查閱官方文檔即可

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

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

相關文章

大文件分割,合并------C++ ------fstream

將一個大文件(這里測試文件為5.2G)切分為指定大小的文件,然后在把分割后的文件拼接合并為分割前的源文件 #include <boost/timer.hpp> // 計時函數#include <filesystem> #include <fstream> #include <vector> // 分隔后文件夾的格式, 原文件名_chun…

探索開源游戲的樂趣與無限可能 | 開源專題 No.47

CleverRaven/Cataclysm-DDA Stars: 9.0k License: NOASSERTION Cataclysm&#xff1a;Dark Days Ahead 是一個回合制的生存游戲&#xff0c;設定在一個后啟示錄世界中。盡管有些人將其描述為 “僵尸游戲”&#xff0c;但 Cataclysm 遠不止于此。在這個殘酷、持久、程序生成的世…

【原創】【一類問題的通法】【真題+李6卷6+李4卷4(+李6卷5)分析】合同矩陣A B有PTAP=B,求可逆陣P的策略

【鋪墊】二次型做的變換與相應二次型矩陣的對應&#xff1a;二次型f&#xff08;x1&#xff0c;x2&#xff0c;x3&#xff09;xTAx&#xff0c;g&#xff08;y1&#xff0c;y2&#xff0c;y3&#xff09;yTBy ①若f在可逆變換xPy下化為g&#xff0c;即P為可逆陣&#xff0c;有P…

Unity 通過鍵盤鼠標控制物體移動、旋轉、縮放的方法

在Unity中&#xff0c;使用鍵盤ADWS鍵控制物體移動&#xff0c;通過鼠標左鍵控制物體旋轉&#xff0c;鼠標中鍵控制物體縮放是再常見不過的方法。 方法如下&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine;public class MoveCo…

數字系統設計(EDA)實驗報告【出租車計價器】

一、問題描述 題目九&#xff1a;出租車計價器設計&#xff08;平臺實現&#xff09;★★ 完成簡易出租車計價器設計&#xff0c;選做停車等待計價功能。 1、基本功能&#xff1a; &#xff08;1&#xff09;起步8元/3km&#xff0c;此后2元/km&#xff1b; &#xff08;2…

紅隊攻防實戰之ThinkPHP-RCE集錦

你若不勇敢&#xff0c;誰又可以替你堅強&#xff1f; ThinkPHP 2.x RCE漏洞 1、查詢phpinfo() 2、任意代碼執行 3、Getshell 蟻劍連接&#xff1a; ThinkPHP5 5.0.23 RCE漏洞 發送數據包&#xff1a; 成功執行id命令&#xff1a; 工具驗證 ThinkPHP5 SQL注入漏洞 &&am…

什么是神經網絡的非線性

大家好啊&#xff0c;我是董董燦。 最近在寫《計算機視覺入門與調優》&#xff08;右鍵&#xff0c;在新窗口中打開鏈接&#xff09;的小冊&#xff0c;其中一部分說到激活函數的時候&#xff0c;談到了神經網絡的非線性問題。 今天就一起來看看&#xff0c;為什么神經網絡需…

cuda函數的前綴作用

文章目錄 cuda函數的前綴作用1、前綴作用2、global3、device4、host cuda函數的前綴作用 1、前綴作用 函數執行環境標識符&#xff0c;即表明函數在哪里被調用 2、global __global__修飾的函數是核函數&#xff0c;這些函數在GPU上執行&#xff0c;但是需要在CPU上調用。 g…

激光打標機在智能手表上的應用:科技與時尚的完美結合

隨著科技的飛速發展&#xff0c;智能手表已經成為我們日常生活中不可或缺的智能設備。而在智能手表制造中&#xff0c;激光打標機扮演著至關重要的角色。本文將詳細介紹激光打標機在智能手表制造中的應用&#xff0c;以及其帶來的優勢和影響。 ? 一、激光打標機在智能手表制…

按訂單周期結算的產品成本

原文地址&#xff1a;Product Cost By Order Cycle | SAP Blogs 產品成本核算是每個制造企業的控制部門的核心職責之一&#xff0c;根據其產品和生產的性質&#xff0c;每個企業的成本核算有所不同。它支持組織在其他職能領域做出大量戰略決策。在過去幾年中獲得了 SAP 產品成本…

Vite4、Vue3、Axios 針對請求模塊化封裝搭配自動化導入(簡單易用)

針對請求模塊化封裝搭配自動化導入&#xff08;簡單易用&#xff09; 目標目錄目標代碼前提步入正題src / utils / index.jssrc /api / index.jssrc /api / request.jssrc /api / service.jssrc /api / utils.jssrc /api / modules / demo.js 自動化配置vite.config.jseslint 校…

QEMU環境調試方法

本文從調試的角度出發&#xff0c;分享QEMU調試過程中的常見調試方法。 1.如何查看makefile構建過程執行的命令&#xff1f; 為了深入理解ucore操作系統實驗的編譯鏈接細節&#xff0c;需要知道makefile在執行的過程中一步一步的指令執行情況。然而大部分的工程中&#xff0c;…

CopyClip 2:提升Mac開發效率的利器

在Mac開發的日常工作中&#xff0c;高效地處理剪貼板內容是一個至關重要的任務。幸運的是&#xff0c;有一款強大的工具可以極大地提升你的開發效率——CopyClip 2。本文將介紹CopyClip 2的功能和優勢&#xff0c;以及它是如何成為Mac開發者們不可或缺的利器的。 CopyClip 2 簡…

【Docker】進階之路:(二)Docker簡介

【Docker】進階之路&#xff1a;&#xff08;二&#xff09;Docker簡介 什么是 DockerDocker 由來與發展歷程Docker的架構與組成Docker容器生態容器核心技術容器規范容器平臺技術 為什么使用DockerDocker的應用場景 什么是 Docker 簡單地講&#xff0c;Docker就是一個應用容器…

正則表達式(9):擴展正則表達式

正則表達式&#xff08;9&#xff09;&#xff1a;擴展正則表達式 小結 本博文轉載自 前文中一直在說&#xff0c;在Linux中&#xff0c;正則表達式可以分為”基本正則表達式”和”擴展正則表達式”。 我們已經認識了”基本正則表達式”&#xff0c;現在&#xff0c;我們來認…

T天池SQL訓練營(五)-窗口函數等

–天池龍珠計劃SQL訓練營 5.1窗口函數 5.1.1窗口函數概念及基本的使用方法 窗口函數也稱為OLAP函數。OLAP 是OnLine AnalyticalProcessing 的簡稱&#xff0c;意思是對數據庫數據進行實時分析處理。 為了便于理解&#xff0c;稱之為窗口函數。常規的SELECT語句都是對整張表進…

Unity由“鼠標點不準物體”引發的Camera的相關思考

問題 前段一個同事在使用Unity開發時遇到一個奇怪的問題&#xff0c;使用左鍵點擊發射射線的方式選擇物體&#xff0c;總是選不準&#xff0c;尤其是小的物體&#xff0c;鼠標點擊到物體上&#xff0c;有時能選上&#xff0c;有時選不上&#xff0c;偶爾點擊到物體旁邊…

Tensorflow.js 入門學習指南

Tensorflow.js 入門學習指南 官方地址TensorFlow.js (google.cn) Tensorflowjs是一個機器學習框架&#xff0c;使用 TensorFlowJS 可以創建生產級機器學習模型 安裝包 瀏覽器設置 您可以通過兩種主要方式在瀏覽器項目中獲取 TensorFlow.js&#xff1a; 使用腳本代碼。從 NPM…

基于MATLAB車輛防碰撞系統仿真

摘要 近年來&#xff0c;汽車行業的飛速發展使得我國的汽車保有量快速增長&#xff0c;但由此引發的交通事故導致的人員傷亡數量仍居高不下。從保護人身安全和降低交通事故發生的可能性的角度出發&#xff0c;車輛防碰撞系統能夠使駕駛員在沒注意到與前方車輛有碰撞危險的情況下…

Python:核心知識點整理大全11-筆記

目錄 ?編輯 6.2.4 修改字典中的值 6.2.5 刪除鍵—值對 注意 刪除的鍵—值對永遠消失了。 6.2.6 由類似對象組成的字典 6.3 遍歷字典 6.3.1 遍歷所有的鍵—值對 6.3.2 遍歷字典中的所有鍵 往期快速傳送門&#x1f446;&#xff08;在文章最后&#xff09;&#xff1a; 6.…