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

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

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

華為推出新聲明式 UI 開發(fā)框架(ArkUI)

OpenHarmony技術(shù)社區(qū) ? 來源:HarmonyOS技術(shù)社區(qū) ? 作者:HarmonyOS技術(shù)社區(qū) ? 2022-01-04 13:39 ? 次閱讀

今年的 HDC 華為開發(fā)者大會(huì) 2021,華為又雙叒推出新的聲明式 UI 開發(fā)框架(ArkUI),咋說呢,學(xué)無止境啊,更新速度堪比坐火箭。

雖然沒能到發(fā)布的現(xiàn)場(chǎng)比較遺憾,但是這并不妨礙我們擼代碼的熱情。我也是第一時(shí)間更新 IDE,使用新的開發(fā)框架嘗試開發(fā)一款圖庫(kù)應(yīng)用。

先看效果:

基本語(yǔ)法

新的編譯框架基于 TS,相比于之前的 JS 代碼更簡(jiǎn)潔,將原來的 js、hml、css合并為了 *.ets 一個(gè)文件,而且更接近自然語(yǔ)義,學(xué)習(xí)成本很低。

基本是下面的寫法:

@裝飾器
struct組件名{
build(){
//一個(gè)根容器組件,比如:
Flex(接口){
//內(nèi)容
}.屬性

Tabs(接口){
TabContent(接口){
//內(nèi)容
}
}.屬性

List(接口){
ListItem(接口){
//內(nèi)容
}
}.屬性
}
}

詳細(xì)的內(nèi)容可以參考官方文檔:

https://developer.harmonyos.com/cn/docs/documentation/doc-references/ts-general-ui-concepts-0000001215268053

目前支持的裝飾器:

d1614852-68b8-11ec-b2e9-dac502259ad0.png

實(shí)現(xiàn)一個(gè)菜單欄

上面 2 個(gè)圖片使用了兩種不同的實(shí)現(xiàn)方式,第一種使用的是 Tabs + TabContent,現(xiàn)成的組件實(shí)現(xiàn)也比較簡(jiǎn)單。

代碼如下:

Tabs(
{barPosition:BarPosition.End}//指定頁(yè)簽位置
){
TabContent(){
Photo()//要實(shí)現(xiàn)的內(nèi)容
}.tabBar({
icon:this.menuData[0].url,
text:this.menuData[0].text
})
......
}

不過也有點(diǎn)問題。第一個(gè)就是圖一中的 icon 和 text 有點(diǎn)小,想把尺寸調(diào)大卻發(fā)現(xiàn)各種不支持,只能是這樣默認(rèn)大小,不知道是不是我設(shè)置有問題,有知道怎么操作的大佬歡迎留言指點(diǎn)迷津。

第二個(gè)問題,按理說 TabContent 內(nèi)容是一樣的,可以使用 ForEach+數(shù)組,但是也沒有成功。

最終 Tabs 實(shí)現(xiàn)的效果著實(shí)讓人不太滿意,所以我使用了 Flex 基本布局 + ForEach 重新實(shí)現(xiàn)了圖二中的效果。

代碼如下:

Flex({
direction:FlexDirection.Row,//主軸:橫向布局
alignItems:ItemAlign.Center,//主軸:
justifyContent:FlexAlign.SpaceEvenly
}){
ForEach(this.menuData,(item)=>{
Column(){//列方向布局容器
this.MenuItem(item.url,item.text)
}
.onClick(()=>{
console.info("memememe")
})
})
}

源數(shù)據(jù):

//State:數(shù)據(jù)變化觸發(fā)build(),實(shí)現(xiàn)UI更新
@StatemenuData:Array=[
{url:$r("app.media.0"),text:"照片"},
{url:$r("app.media.1blue"),text:"相冊(cè)"},
{url:$r("app.media.2"),text:"時(shí)刻"},
{url:$r("app.media.3"),text:"發(fā)現(xiàn)"}

菜單項(xiàng):

@BuilderMenuItem(url,text){
Column(){
Image(url)
.objectFit(ImageFit.Contain)//保持長(zhǎng)寬比縮小或放大,以便圖像完全顯示在顯示邊界內(nèi)。
.width('60%').height('60%')
Text(text)
.fontSize(14)
}
}

總體來看 Flex + ForEach 效果的實(shí)現(xiàn)更自由一些,但是點(diǎn)擊交互切換標(biāo)簽等操作都需要手動(dòng)實(shí)現(xiàn),不如組件化的 Tabs 方便,或許以后會(huì)支持把。

實(shí)現(xiàn)照片區(qū)域

首先照片區(qū)域使用了下面的數(shù)據(jù)格式:

@StatephotoData:Array=[
{
date:"昨天",
photos:[{src:$r("app.media.today1")},{src:$r("app.media.today2")},{src:$r("app.media.today3")}]
},
{
date:"2021年10月27日",
photos:[{src:$r("app.media.today4")},{src:$r("app.media.today5")},{src:$r("app.media.today6")},{
src:$r("app.media.today7")
}]
},
{
date:"2021年10月26日",
photos:[{src:$r("app.media.today8")}]
},
{
date:"2021年10月25日",
photos:[{src:$r("app.media.today9")},{src:$r("app.media.today11")}]
},
{
date:"2021年10月24日",
photos:[{src:$r("app.media.today10")}]
}
,
{
date:"2021年10月23日",
photos:[{src:$r("app.media.today1")}]
}
]

所以可以使用 ForEach 循環(huán)嵌套的方式,只需要簡(jiǎn)單的代碼,就可以實(shí)現(xiàn)照片列表的效果。

//照片區(qū)
List(){
ForEach(this.photoData,(item)=>{
ListItem(){
Flex({direction:FlexDirection.Column}){
Text(item.date).fontSize(18).margin({top:20,left:15,bottom:5})
Flex({direction:FlexDirection.Row}){
ForEach(item.photos,(item)=>{
Image(item.src).objectFit(ImageFit.Cover).width(80).height(80).margin({right:2})
})
}
}
}
})

代碼打包上傳了,感興趣的小伙伴,可以下載源碼查看:

https://harmonyos.51cto.com/posts/9634

原文標(biāo)題:在HarmonyOS上做一個(gè)相冊(cè)應(yīng)用

文章出處:【微信公眾號(hào):HarmonyOS技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:彭菁

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

    關(guān)注

    216

    文章

    34499

    瀏覽量

    252334
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    660

    瀏覽量

    32926
  • 開發(fā)者
    +關(guān)注

    關(guān)注

    1

    文章

    586

    瀏覽量

    17047

原文標(biāo)題:在HarmonyOS上做一個(gè)相冊(cè)應(yīng)用

文章出處:【微信號(hào):gh_834c4b3d87fe,微信公眾號(hào):OpenHarmony技術(shù)社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HDC技術(shù)分論壇:HarmonyOS新一代UI框架的全面解讀

    作者:yuzhiqiang,UI編程框架首席技術(shù)專家在Harmony 3.0.0開發(fā)者預(yù)覽版中,包含了新一代的聲明
    發(fā)表于 10-26 18:48

    HDC技術(shù)分論壇:HarmonyOS新一代UI框架的全面解讀

    作者:yuzhiqiang,UI編程框架首席技術(shù)專家在Harmony 3.0.0開發(fā)者預(yù)覽版中,包含了新一代的聲明
    發(fā)表于 11-22 16:51

    HarmonyOS應(yīng)用開發(fā)-ArkUI聲明UI工程體驗(yàn)與分享

    聲明UI工程體驗(yàn)1. 創(chuàng)建工程說明:聲明UI工程目前僅在API7才能使用 選擇 選擇
    發(fā)表于 12-08 10:22

    課程預(yù)告丨12月15日官方直播帶你領(lǐng)略ArkUI聲明開發(fā)范式之美

    方舟開發(fā)框架ArkUI)的聲明開發(fā)范式有什么優(yōu)勢(shì)?Java/JS/eTS(extended
    發(fā)表于 12-10 17:52

    4天帶你上手HarmonyOS ArkUI開發(fā)

    本次HarmonyOS ArkUI入門訓(xùn)練營(yíng)課程--健康生活實(shí)戰(zhàn)篇,手把手教大家如何制作一個(gè)合理膳食的APP前端Demo!課程實(shí)戰(zhàn)樣例通過ArkUI聲明
    發(fā)表于 09-09 14:44

    ArkUI框架,更懂程序員的UI信息語(yǔ)法

    搜索了一下ArkUI有什么優(yōu)勢(shì)。發(fā)現(xiàn)很重要的一個(gè)原因:ArkUI使用了聲明UI開發(fā)
    發(fā)表于 12-14 11:23

    ArkUI,更高效的框架設(shè)計(jì)

    了一整套完整的分層機(jī)制。接下來我們依次分層為大家介紹。 ArkUI框架的“前驅(qū)”——【前端層】 前端層 架構(gòu)的第一層【前端層】又稱【聲明UI
    發(fā)表于 12-21 10:26

    4天帶你上手HarmonyOS ArkUI開發(fā)——《HarmonyOS ArkUI入門訓(xùn)練營(yíng)之健康生活實(shí)戰(zhàn)》

    框架及組件用法,完成一款健康飲食應(yīng)用的界面開發(fā),結(jié)合DevEco Studio提供的多設(shè)備預(yù)覽能力,體驗(yàn)ArkUI框架帶來的一次開發(fā)多設(shè)備適
    發(fā)表于 01-05 11:49

    ArkUI新能力,助力應(yīng)用開發(fā)更便捷

    ArkUI是一套構(gòu)建分布應(yīng)用的聲明UI開發(fā)框架。
    發(fā)表于 02-15 11:40

    OpenHarmony應(yīng)用開發(fā)-ArkUI方舟開發(fā)框架簡(jiǎn)析

    方舟開發(fā)框架(簡(jiǎn)稱ArkUI)為OpenHarmony應(yīng)用的UI開發(fā)提供了完整的基礎(chǔ)設(shè)施,包括簡(jiǎn)潔的UI
    發(fā)表于 04-23 09:35

    HarmonyOS測(cè)試技術(shù)與實(shí)戰(zhàn)-華為ArkUI開發(fā)框架和場(chǎng)景測(cè)試

    HDC 2021華為開發(fā)者大會(huì)HarmonyOS測(cè)試技術(shù)與實(shí)戰(zhàn)-華為ArkUI開發(fā)框架和場(chǎng)景測(cè)試
    的頭像 發(fā)表于 10-23 15:16 ?1916次閱讀
    HarmonyOS測(cè)試技術(shù)與實(shí)戰(zhàn)-<b class='flag-5'>華為</b><b class='flag-5'>ArkUI</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>框架</b>和場(chǎng)景測(cè)試

    全面解讀HarmonyOS新一代UI框架

    作者:yuzhiqiang,UI編程框架首席技術(shù)專家 在Harmony 3.0.0開發(fā)者預(yù)覽版中,包含了新一代的聲明
    的頭像 發(fā)表于 10-29 10:21 ?2738次閱讀
    全面解讀HarmonyOS新一代<b class='flag-5'>UI</b><b class='flag-5'>框架</b>

    ArkUI,更高效的框架設(shè)計(jì)

    看出,ArkUI的設(shè)計(jì)理念是在端到端整條技術(shù)路徑設(shè)計(jì)上建立了一整套完整的分層機(jī)制。接下來我們依次分層為大家介紹。 ArkUI框架的“前驅(qū)”——【前端層】 前端層 架構(gòu)的第一層【前端層】又稱【
    的頭像 發(fā)表于 12-21 09:15 ?1631次閱讀

    ArkUI新能力,助力應(yīng)用開發(fā)更便捷

    作者:niulihua,華為ArkUI技術(shù)專家;wanglei,華為ArkUI技術(shù)專家 ArkUI是一套構(gòu)建分布
    的頭像 發(fā)表于 02-15 16:35 ?879次閱讀

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

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