本文正在參加星光計劃3.0–夏日挑戰賽
1. 圖示介紹
應用程式中圖示作為UI界面視覺組成的一部分,其可以替代文字表達出文字的含義。如底部頁籤使用圖示+文字的方式視覺效果更明顯,使用不同的圖示表示天氣狀态等。
本節将建構适用于HarmonyOS/OpenHarmony icon圖示元件庫(基于eTS+Api8)。
2. 圖示分類
- 圖檔圖示,如
,png
等格式,缺點是占用存儲大,且尺寸固定,放大縮小會使圖像變虛,多個顔色的圖示需要多張圖檔。一般用于應用程式圖示。jpg
- 字元圖示常見的是Unicode特殊字元、Unicode變種Font Class、全新方式Symbol。字元圖示優勢在于占體小,易操作(可以像操作字型一樣),單個多顔色的圖示隻需要一個即可。
3. 自定義icon圖示
1)建立項目并建立icon子產品
- 打開DevEco Studio建立項目
(名稱根據自己的項目命名),注意Ability Template選擇HarmonyOS模闆TeCustomIcon
- 項目名稱右鍵
,打開子產品建立視窗,選擇Ohos Library,點選Next填寫子產品名稱。New > Module
2)建構icon子產品并引入
- 點選Project頁簽中的
子產品,然後點選菜單欄tetcl_icon
進行建構Build > Make Module 'tetcl_icon'
- 控制台出現
表示建構成功BUILD SUCCESSFUL
- 打開
,在TeCustomIcon > entry > package.json
中添加建構的自定義icon子產品dependencies
{
"name": "entry",
"version": "1.0.0",
"ohos": {
"org": "huawei",
"buildTool": "hvigor",
"directoryLevel": "module"
},
"description": "example description",
"repository": {},
"license": "ISC",
"dependencies": {
"@ohos/tetcl_icon": "file:../tetcl_icon"
}
}
其中
@ohos/tetcl_icon
為
tetcl_icon
子產品下
package.json
檔案中的
name
屬性。

然後點選編輯器上方的Sync Now進行同步。
- 初始建立的
子產品,官方預設提供了tetcl_icon
,可以引入到MainPage
中嘗試是否構模組化塊成功。修改TeCustomIcon/entry
代碼如下:TeCustomIcon/entry/src/main/ets/MainAbility/pages/index.ets
import {MainPage} from '@ohos/tetcl_icon/index'
@Entry
@Component
struct Index {
build() {
Row() {
MainPage({message: "Hello HarmonyOS/OpenHarmony"})
}
.height('100%')
}
}
點選視窗右側的Previewer打開預覽器,預覽效果。
至此證明我們的
tetcl_icon
子產品是正确的。
- 注意:控制台報如下錯誤,需要打開
删除MainPage
注解,然後重新建構一次。@Entry
[Compile Result] ETS:WARN File: F:\Huawei\HarmonyOSWorkspace\TeCustomIcon\entry\src\main\ets\MainAbility\pages\index.ets
[Compile Result] It's not a recommended way to export struct with @Entry decorator, which may cause ACE Engine error in component preview mode.
[Compile Result] ETS:WARN File: F:\Huawei\HarmonyOSWorkspace\TeCustomIcon\tetcl_icon\index.ets
[Compile Result] It's not a recommended way to export struct with @Entry decorator, which may cause ACE Engine error in component preview mode.
[phone][Console INFO] 07/25 11:26:45 5340 app Log: Application onCreate
3)實作自定義icon圖示
- 這裡以使用者圖示為例,在阿裡巴巴矢量圖示庫搜尋使用者圖示,選擇一個圖示并複制svg代碼,然後在
建立tetcl_ico/src/main/ets/resources/
檔案夾同時建立rawfile
。将複制的svg代碼粘貼到user.svg
中,使用Ctrl+Alt+L格式化代碼,并删除報錯屬性值,在user.svg
标簽加入path
屬性設定預設顔色fill
<path d="..." fill="#f2f2f2"></path>
#夏日挑戰賽#一種eTS自定義icon圖示元件的思路 - 在
中建立tetcl_icon/src/main/ets/components
檔案,并編寫如下代碼:TeIcon.ets
/**
* @Description 自定義圖示
* @date 2022/7/25 11:20
* @Author Bai XiaoMing
* @Version 1.0
*/
@Component
export struct TeIcon {
size: number //設定icon圖示寬高
color: ResourceColor //填充圖示顔色
build() {
Image($rawfile('user.svg')).width(this.size).height(this.size).fillColor(this.color)
}
}
- 在
中導出自定義的icon圖示tetcl_icon/src/index.ets
export { TeIcon } from './src/main/ets/components/TeIcon'
4)引入自定義icon圖示
- 修改
代碼如下:TeCustomIcon/entry/src/main/ets/MainAbility/pages/index.ets
import {TeIcon} from '@ohos/tetcl_icon/index'
@Entry
@Component
struct Index {
build() {
Flex({alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center}) {
TeIcon({size: 100, color: 0x554466})
}
.height('100%')
}
}
- 使用預覽器預覽效果
#夏日挑戰賽#一種eTS自定義icon圖示元件的思路
至此我們自定義的icon圖示庫已經實作了,你可以在此基礎上繼續完善。
附件連結:https://ost.51cto.com/resource/2217