在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS ArkUI 3.0框架試玩初體驗

OpenHarmony技術社區 ? 來源:鴻蒙技術社區 ? 作者:木棉花HOS ? 2021-12-03 10:14 ? 次閱讀

HarmonyOS ArkUI 3.0正式到來,今天就給大家分享一下我的 HarmonyOS ArkUI 3.0 框架試玩初體驗,以合成 1024 的開發實戰,帶大家感受一下 HarmonyOS ArkUI 3.0 的極簡開發。

創建一個空白的工程

①安裝和配置 DevEco Studio

DevEco Studio 下載:
https://developer.harmonyos.com/cn/develop/deveco-studio#download

DevEco Studio 安裝:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415

②創建一個 Empty Ability 應用

DevEco Studio 下載安裝成功后,打開 DevEco Studio,點擊左上角的 File,點擊 New,再選擇 New Project,選擇 Empty Ability 選項,點擊 Next 按鈕。

將文件命名為 MyETSApplication(文件名不能出現中文或者特殊字符,否則將無法成功創建項目文件),Project Type 勾選 Application,選擇保存路徑。

Language 勾選 eTS,選擇 API7,設備勾選 Phone,最后點擊 Finish 按鈕。

③準備工作

在 entry>src>main>config.json 文件中最下方"launchType": "standard"的后面添加以下代碼,這樣就可以實現去掉應用上方的標簽欄了。

config.json 最下方部分代碼:
"metaData":{
"customizeData":[
{
"name":"hwc-theme",
"value":"androidhwext:style/Theme.Emui.Light.NoTitleBar",
"extra":""
}
]
}

實現界面布局

①保存圖片

將 logo 圖片保存到 entry>src>main>resources>base>media 文件中。

②新一代的聲明式 UI 開發范式

具體而言,ArkUI 3.0 中的新一代聲明式 UI 開發范式,主要特征如下:

(1)基于 TypeScript 擴展的聲明式 UI 描述語法,提供了類自然語言的UI描述和組合。

(2)開箱即用的多態組件。多態是指 UI 描述是統一的,UI 呈現在不同類型設備上會有所不同。比如 Button 組件在手機和手表會有不同的樣式和交互方式。

(3)多維度的狀態管理機制,支持靈活的數據驅動的 UI 變更。

裝飾器:用來裝飾類、結構體、方法以及變量,賦予其特殊的含義,如上述示例中 @Entry、@Component、@State 都是裝飾器。

@Component 表示這是個自定義組件;@Entry 則表示這是個入口組件;@State 表示組件中的狀態變量,這個狀態變化會引起 UI 變更。

自定義組件:可復用的 UI 單元,可組合其它組件,如上述被 @Component 裝飾的 struct Hello。

UI 描述:聲明式的方式來描述UI的結構,如上述 build() 方法內部的代碼塊。

內置組件:框架中默認內置的基礎和布局組件,可直接被開發者調用,比如示例中的 Column、Text、Divider、Button。

事件方法:用于添加組件對事件的響應邏輯,統一通過事件方法進行設置,如跟隨在 Button 后面的 onClick()。

屬性方法:用于組件屬性的配置,統一通過屬性方法進行設置,如 fontSize()、width()、height()、color() 等,可通過鏈式調用的方式設置多項屬性。

③實現界面

這一次程序用到的裝飾器分別有@Entry 、@Component、@State和@Link 。

裝飾器@Entry 裝飾的自定義組件用作頁面的默認入口組件,加載頁面時,將首先創建并呈現 @Entry 裝飾的自定義組件。

要注意的是:在單個源文件中,最多可以使用 @Entry 裝飾一個自定義組件。

裝飾器@Component 裝飾的 struct 表示該結構體具有組件化能力,能夠成為一個獨立的組件,這種類型的組件也稱為自定義組件。該組件可以組合其他組件,它通過實現 build 方法來描述 UI 結構。 組件生命周期包括:
  • aboutToAppear:函數在創建自定義組件的新實例后,在執行其build函數之前執行。允許在 aboutToAppear 函數中改變狀態變量,這些更改將在后續執行build函數中生效。

  • aboutToDisappear:函數在自定義組件析構消耗之前執行。不允許在 aboutToDisappear 函數中改變狀態變量,特別是 @Link 變量的修改可能會導致應用程序行為不穩定。

  • onPageShow:當此頁面顯示時觸發一次。包括路由過程、應用進入前后臺等場景,僅 @Entry 修飾的自定義組件生效。

  • onPageHide:當此頁面消失時觸發一次。包括路由過程、應用進入前后臺等場景,僅 @Entry 修飾的自定義組件生效。

  • onBackPress:當用戶點擊返回按鈕時觸發,,僅 @Entry 修飾的自定義組件生效。

裝飾器@State 裝飾的變量是組件內部的狀態數據,當這些狀態數據被修改時,將會調用所在組件的 build 方法進行 UI 刷新。

要注意的是,標記為 @State 的屬性不能直接在組件外部修改,必須為所有 @State 變量分配初始值。

裝飾器@Link 裝飾的變量可以和父組件的 @State 變量建立雙向數據綁定。要注意的是,@Link 變量不能在組件內部進行初始化,在創建組件的新實例時,必須使用命名參數初始化所有 @Link 變量。

@Link 變量可以使用 @State 變量或 @Link 變量的引用進行初始化。@State 變量可以通過’$'操作符創建引用。

index.ets:先定義一個方格的背景顏色字典 colors,用以繪制不同數字的背景顏色,和一個全局變量 number,用以 ForEach 的鍵值生成。

varnumber=1
constcolors={
"0":"#CDC1B4",
"2":"#EEE4DA",
"4":"#ECE0C6",
"8":"#F2B179",
"16":"#F59563",
"32":"#F67C5F",
"64":"#F65E3B",
"128":"#EDCF72",
"256":"#EDCC61",
"512":"#99CC00",
"1024":"#83AF9B",
"2048":"#0099CC",
"4096":"#0099CC",
"8192":"#0099CC"
}

對于 4x4 的方格,如果要一個一個繪制,那么就需要重復繪制 16 個 Text 組件,而且這些 Text 組件除了文本之外,其他屬性值都是一樣的,這樣極其繁瑣且沒有必要,體現不了 HarmonyOS ArkUI 3.0 的極簡開發。

我們可以把 4x4 的方格以每一行定義成一個組件,每一行每一行地繪制,這樣能夠極大的減少代碼量。

對于每一行組件,傳統的方式是重復繪制 4 個 Text 組件,而且這些 Text 組件除了文本之外,其他屬性值都是一樣的,同樣極其繁瑣且沒有必要。

我們可以采用 ForEach 循環渲染來繪制:

第一個參數必須是數組:允許空數組,空數組場景下不會創建子組件。同時允許設置返回值為數組類型的函數。

例如 arr.slice(1, 3),設置的函數不得改變包括數組本身在內的任何狀態變量,如 Array.splice、Array.sort 或 Array.reverse 這些原地修改數組的函數。

第二個參數用于生成子組件的 lambda 函數。它為給定數組項生成一個或多個子組件。單個組件和子組件列表必須括在大括號“{…}”中。

可選的第三個參數是用于鍵值生成的匿名函數。它為給定數組項生成唯一且穩定的鍵值。

當子項在數組中的位置更改時,子項的鍵值不得更改,當數組中的子項被新項替換時,被替換項的鍵值和新項的鍵值必須不同。

鍵值生成器的功能是可選的。但是,出于性能原因,強烈建議提供,這使開發框架能夠更好地識別數組更改。

如單擊進行數組反向時,如果沒有提供鍵值生成器,則 ForEach 中的所有節點都將重建。

使用裝飾器 @Component,自定義一個每一行的組件,用裝飾器 @Link 定義一個數組 grids。

在 build() 里面添加彈性布局 Flex,使用循環渲染 ForEach 來繪制組件 Text。

對于每一個 Text 組件,文本判斷是否為 0,如果值為 0,則不顯示,背景顏色采用剛才定義好的背景顏色字典 colors 對應的背景顏色。

文本顏色判斷其值是否為 2 或 4,如果為 2 或 4,則采用顏色 #645B52,否則采用背景顏色白色。

@Component
structsetText{
@Linkgrids:number[]

build(){
Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center,direction:FlexDirection.Row}){
ForEach(this.grids,
(item:number)=>Text(item==0?'':item.toString())
.width(70)
.height(70)
.textAlign(TextAlign.Center)
.fontSize(30)
.margin({left:5,top:5,right:5,bottom:5})
.backgroundColor(colors[item.toString()])
.fontColor((item==2||item==4)?'#645B52':'#FFFFFF'),
(item:number)=>(number++)+item.toString())
}
}
}

同理,使用裝飾器 @Component,自定義一個按鈕 Button 組件,用以繪制上下左右四個按鈕。

@Component
structsetButton{
privatedirtext:string
privatedir:string
@LinkGrids:number[][]
@Linkgrid1:number[]
@Linkgrid2:number[]
@Linkgrid3:number[]
@Linkgrid4:number[]

build(){
Button(this.dirtext)
.width(60)
.height(60)
.fontSize(30)
.fontWeight(FontWeight.Bold)
.align(Alignment.Center)
.backgroundColor('#974B31')
.fontColor('#FFFFFF')
.margin({left:5,top:3,right:5,bottom:3})
}
}

在裝飾器 @Entry 裝飾的結構體的 build() 中,將原來的代碼全部刪掉。

使用裝飾器 @State 定義一個二維數組和四個一維數組,添加垂直布局 Column,寬和高都為 100%,背景顏色為白色。

在其中添加 Image 組件,引用剛才保存好的 logo 圖片,再添加一個寬和高都是 320,背景顏色為 #BBADA0 的垂直布局 Column,在其添加四個剛才定義好的行組件 setText。

在外圍的垂直布局 Column 中再添加四個剛才定義好的按鈕組件 setButton,其中中間兩個按鈕組件位于彈性布局 Flex 中,最后添加一個 Button 組件,文本內容為“重新開始”。
@Entry
@Component
structIndex{
@Stategrids:number[][]=[[0,0,0,0],
[0,2,0,0],
[0,0,2,0],
[0,0,0,0]]
@Stategrid1:number[]=[this.grids[0][0],this.grids[0][1],this.grids[0][2],this.grids[0][3]]
@Stategrid2:number[]=[this.grids[1][0],this.grids[1][1],this.grids[1][2],this.grids[1][3]]
@Stategrid3:number[]=[this.grids[2][0],this.grids[2][1],this.grids[2][2],this.grids[2][3]]
@Stategrid4:number[]=[this.grids[3][0],this.grids[3][1],this.grids[3][2],this.grids[3][3]]

build(){
Column(){
Image($r('app.media.logo1024')).width('100%').height(140).align(Alignment.Center)
Column(){
setText({grids:$grid1})
setText({grids:$grid2})
setText({grids:$grid3})
setText({grids:$grid4})
}
.width(320)
.height(320)
.backgroundColor("#BBADA0")
setButton({dirtext:'↑',dir:'up',Grids:$grids,grid1:$grid1,grid2:$grid2,grid3:$grid3,grid4:$grid4})
Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center,direction:FlexDirection.Row}){
setButton({dirtext:'←',dir:'left',Grids:$grids,grid1:$grid1,grid2:$grid2,grid3:$grid3,grid4:$grid4})
setButton({dirtext:'→',dir:'right',Grids:$grids,grid1:$grid1,grid2:$grid2,grid3:$grid3,grid4:$grid4})
}
setButton({dirtext:'↓',dir:'down',Grids:$grids,grid1:$grid1,grid2:$grid2,grid3:$grid3,grid4:$grid4})
Button('重新開始')
.width(180)
.height(50)
.fontSize(30)
.align(Alignment.Center)
.backgroundColor('#974B31')
.fontColor('#FFFFFF')
.margin({left:5,top:3,right:5,bottom:3})
}
.width('100%')
.height('100%')
.backgroundColor("#FFFFFF")
.alignItems(HorizontalAlign.Center)
}
}

編寫邏輯代碼

index.ets:在結構體 setButton 中添加四個函數。
  • addTwoOrFourToGrids():用以隨機生成一個新的方格數字,數字為2或4。

  • swipeGrids(direction):用以實現方格的重新生成。

  • changeGrids(direction):用以實現方格的上下左右移動。

  • changeString():用以將二維數組分成四個一維數組。

最后在 Button 組件的屬性里添加一個點擊事件,依次調用函數 swipeGrids(direction)、addTwoOrFourToGrids() 和 changeString()。

@Component
structsetButton{
privatedirtext:string
privatedir:string
@LinkGrids:number[][]
@Linkgrid1:number[]
@Linkgrid2:number[]
@Linkgrid3:number[]
@Linkgrid4:number[]

addTwoOrFourToGrids(){
letarray=[];
for(letrow=0;row4;row++)
for(letcolumn=0;column4;column++)
if(this.Grids[row][column]==0)
array.push([row,column]);

letrandomIndes=Math.floor(Math.random()*array.length);
letrow=array[randomIndes][0];
letcolumn=array[randomIndes][1];
if(Math.random()0.8){
this.Grids[row][column]=2;
}else{
this.Grids[row][column]=4;
}
}

swipeGrids(direction){
letnewGrids=this.changeGrids(direction);
if(newGrids.toString()!=this.Grids.toString()){
this.Grids=newGrids;
}
}

changeGrids(direction){
letnewGrids=[[0,0,0,0],
[0,0,0,0],
[0,0,0,0],
[0,0,0,0]];

if(direction=='left'||direction=='right'){
letstep=1;
if(direction=='right'){
step=-1;//step作為循環時數組下標改變的方向
}
for(letrow=0;row4;row++){//每一層
letarray=[];

letcolumn=0;//如果為left則從0開始right從3開始,
if(direction=='right'){
column=3;
}
for(leti=0;i4;i++){
if(this.Grids[row][column]!=0){//把所有非零元依次放入數組中
array.push(this.Grids[row][column]);
}
column+=step;//當direction為left時則從0向3遞增,為right時則從3向0遞減
}
for(leti=0;i1;i++){//訪問當前元素及他的下一個元素,所有循環次數為length-1
if(array[i]==array[i+1]){//判斷是否可合并,
array[i]+=array[i+1];//合并,
array[i+1]=0;//合并后參與合并的第二個元素消失
i++;
}
}

column=0;
if(direction=='right'){
column=3;
}

for(constelemofarray){
if(elem!=0){//跳過array里的空元素
newGrids[row][column]=elem;//把合并后的狀態賦給新數組grids,
column+=step;
}
}
}
}elseif(direction=='up'||direction=='down'){//同理
letstep=1;
if(direction=='down'){
step=-1;
}

for(letcolumn=0;column4;column++){
letarray=[];

letrow=0;
if(direction=='down'){
row=3;
}
for(leti=0;i4;i++){
if(this.Grids[row][column]!=0){
array.push(this.Grids[row][column]);
}
row+=step;
}
for(leti=0;i1;i++){
if(array[i]==array[i+1]){
array[i]+=array[i+1];
array[i+1]=0;
i++;
}
}
row=0;
if(direction=='down'){
row=3;
}
for(constelemofarray){
if(elem!=0){
newGrids[row][column]=elem;
row+=step;
}
}
}
}
returnnewGrids;
}

changeString(){
this.grid1=[this.Grids[0][0],this.Grids[0][1],this.Grids[0][2],this.Grids[0][3]]
this.grid2=[this.Grids[1][0],this.Grids[1][1],this.Grids[1][2],this.Grids[1][3]]
this.grid3=[this.Grids[2][0],this.Grids[2][1],this.Grids[2][2],this.Grids[2][3]]
this.grid4=[this.Grids[3][0],this.Grids[3][1],this.Grids[3][2],this.Grids[3][3]]
}

build(){
Button(this.dirtext)
.width(60)
.height(60)
.fontSize(30)
.fontWeight(FontWeight.Bold)
.align(Alignment.Center)
.backgroundColor('#974B31')
.fontColor('#FFFFFF')
.margin({left:5,top:3,right:5,bottom:3})
.onClick((event:ClickEvent)=>{
this.swipeGrids(this.dir)
this.addTwoOrFourToGrids()
this.changeString()
})
}
}

在結構體 index 中文本內容為“重新開始”的按鈕添加一個點擊事件,用以重新初始化數據。

@Entry
@Component
structIndex{
@Stategrids:number[][]=[[0,0,0,0],
[0,2,0,0],
[0,0,2,0],
[0,0,0,0]]
@Stategrid1:number[]=[this.grids[0][0],this.grids[0][1],this.grids[0][2],this.grids[0][3]]
@Stategrid2:number[]=[this.grids[1][0],this.grids[1][1],this.grids[1][2],this.grids[1][3]]
@Stategrid3:number[]=[this.grids[2][0],this.grids[2][1],this.grids[2][2],this.grids[2][3]]
@Stategrid4:number[]=[this.grids[3][0],this.grids[3][1],this.grids[3][2],this.grids[3][3]]

build(){
Column(){
Image($r('app.media.logo1024')).width('100%').height(140).align(Alignment.Center)
Column(){
setText({grids:$grid1})
setText({grids:$grid2})
setText({grids:$grid3})
setText({grids:$grid4})
}
.width(320)
.height(320)
.backgroundColor("#BBADA0")
setButton({dirtext:'↑',dir:'up',Grids:$grids,grid1:$grid1,grid2:$grid2,grid3:$grid3,grid4:$grid4})
Flex({justifyContent:FlexAlign.Center,alignItems:ItemAlign.Center,direction:FlexDirection.Row}){
setButton({dirtext:'←',dir:'left',Grids:$grids,grid1:$grid1,grid2:$grid2,grid3:$grid3,grid4:$grid4})
setButton({dirtext:'→',dir:'right',Grids:$grids,grid1:$grid1,grid2:$grid2,grid3:$grid3,grid4:$grid4})
}
setButton({dirtext:'↓',dir:'down',Grids:$grids,grid1:$grid1,grid2:$grid2,grid3:$grid3,grid4:$grid4})
Button('重新開始')
.width(180)
.height(50)
.fontSize(30)
.align(Alignment.Center)
.backgroundColor('#974B31')
.fontColor('#FFFFFF')
.margin({left:5,top:3,right:5,bottom:3})
.onClick((event:ClickEvent)=>{
this.grids=[[0,0,0,0],
[0,2,0,0],
[0,0,2,0],
[0,0,0,0]]

this.grid1=[this.grids[0][0],this.grids[0][1],this.grids[0][2],this.grids[0][3]]
this.grid2=[this.grids[1][0],this.grids[1][1],this.grids[1][2],this.grids[1][3]]
this.grid3=[this.grids[2][0],this.grids[2][1],this.grids[2][2],this.grids[2][3]]
this.grid4=[this.grids[3][0],this.grids[3][1],this.grids[3][2],this.grids[3][3]]
})
}
.width('100%')
.height('100%')
.backgroundColor("#FFFFFF")
.alignItems(HorizontalAlign.Center)
}
}

寫在最后

HarmonyOS ArkUI 3.0 框架還有很多內容在本次程序中沒有涉及到,例如頁面跳轉、數據管理、分布式數據庫、分布式流轉、分布式協同等等,我會在以后的文章中陸陸續續分享我的實戰操作,希望能與各位一起學習相互交流!
編輯:jq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 程序
    +關注

    關注

    117

    文章

    3825

    瀏覽量

    82558
  • 代碼
    +關注

    關注

    30

    文章

    4891

    瀏覽量

    70350
  • 生成器
    +關注

    關注

    7

    文章

    322

    瀏覽量

    21742

原文標題:HarmonyOS ArkUI 3.0框架試玩!

文章出處:【微信號:gh_834c4b3d87fe,微信公眾號:OpenHarmony技術社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    HarmonyOS NEXT意圖框架習慣推薦一場景說明

    一、概述 意圖框架HarmonyOS系統級的意圖標準體系。將應用和元服務的業務功能智慧分發給不同的系統入口,以“音樂播放”為例,HarmonyOS將業務分發給“小藝建議”,提供了桌面大流量曝光
    發表于 06-18 15:06

    ArkUI-X跨平臺應用改造指南

    工作量大幅增加,開發成本也隨之上升,而且很難保持一致的交互體驗。 ArkUI-X 跨平臺框架是基于 HarmonyOS 打造的跨端跨平臺框架,能實現 “一次開發、三平臺部署”。 基于A
    發表于 06-16 23:05

    ArkUI-X在Android平臺動態化開發指南

    本文介紹如何在Android平臺進行ArkUI-X動態化開發,包括動態化目錄規則及約束。 適用場景 動態化主要包括兩個典型場景: 場景1:框架動態化,為了降低應用ROM體積占用,及滿足動態升級框架
    發表于 06-15 23:33

    ArkUI-X框架LogInterface使用指南

    ArkUI-X框架支持日志攔截能力,Android側提供原生接口,用于注入LogInterface接口,框架日志及ts日志通過該接口輸出,本文的核心內容是介紹如何在Android平臺上有效利用
    發表于 06-15 23:20

    ArkUI-X與Android消息通信

    平臺橋接用于客戶端(ArkUI)和平臺(Android或iOS)之間傳遞消息,即用于ArkUI與平臺雙向數據傳遞、ArkUI側調用平臺的方法、平臺調用ArkUI側的方法。本文主要介紹A
    發表于 06-08 22:15

    ArkUI-X跨平臺框架接入指南

    ArkUI跨平臺框架(ArkUI-X)進一步將ArkUI開發框架擴展到了多個OS平臺:目前支持OpenHarmony、Android、 iO
    發表于 05-18 18:21

    百度飛槳框架3.0正式版發布

    大模型訓練成本高?推理效率低?硬件適配難? 4月1日,百度發布 飛槳框架3.0正式版 !五大特性專為大模型設計。 作為大模型時代的Infra“基礎設施”,深度學習框架的重要性愈發凸顯,大模型訓練
    的頭像 發表于 04-02 19:03 ?623次閱讀
    百度飛槳<b class='flag-5'>框架</b><b class='flag-5'>3.0</b>正式版發布

    HarmonyOS開發指導類文檔更新速遞(上)

    伴隨著HarmonyOS 5.0.0 Release版本的發布,HarmonyOS官網文檔也帶來了不少上新內容。本期HarmonyOS NEXT開發者資料直通車將從文檔更新角度為開發者推薦應用
    的頭像 發表于 12-30 09:50 ?909次閱讀
    <b class='flag-5'>HarmonyOS</b>開發指導類文檔更新速遞(上)

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)綜述

    一、綜述 Intents Kit(意圖框架服務)是HarmonyOS級的意圖標準體系 ,意圖連接了應用/元服務內的業務功能。 意圖框架能幫開發者將應用/元服務內的業務功能,智能分發到各系統入口,這個
    發表于 11-28 10:43

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)習慣推薦方案概述

    用戶的行為習慣。 2.在HarmonyOS學習到用戶的行為習慣后,會給用戶推薦相應功能,并且嘗試補充詳細功能參數,減少用戶執行任務的步驟。 以聽音樂為例,意圖框架設計了統一的意圖——播放歌單意圖,該意圖可以讓
    發表于 11-19 17:59

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)本地搜索方案概述

    一、概述 本地搜索是在HarmonyOS歸一化搜索特性,開發者將應用/元服務內的功能和內容通過意圖框架共享到HarmonyOS,即可實現“一步搜索,內容直達”。 二、典型場景 以“音樂垂域”的“歌曲
    發表于 11-06 10:59

    AWTK 最新動態:支持鴻蒙系統(HarmonyOS Next)

    導讀HarmonyOS是全球第三大移動操作系統,有巨大的市場潛力,在國產替代的背景下,機會多多,AWTK支持HarmonyOS,讓AWTK開發者也能享受HarmonyOS生態的紅利。AWTK全稱
    的頭像 發表于 11-06 08:03 ?769次閱讀
    AWTK 最新動態:支持鴻蒙系統(<b class='flag-5'>HarmonyOS</b> Next)

    學習鴻蒙必須要知道的幾個名詞

    HarmonyOS提供了一套UI(UserInterface,用戶界面)開發框架,即方舟開發框架ArkUI框架),用于快速搭建漂亮的用戶界
    的頭像 發表于 07-06 08:04 ?781次閱讀
    學習鴻蒙必須要知道的幾個名詞

    HarmonyOS NEXT Developer Beta1最新術語表

    ArkUI 方舟開發框架,是為HarmonyOS平臺開發極簡、高性能、跨設備應用設計研發的UI開發框架,支撐開發者高效地構建跨設備應用UI界面。。 ArkCompiler 方舟編譯
    發表于 06-27 16:16

    HarmonyOS NEXT Developer Beta1中的Kit

    HarmonyOS NEXT Developer Preview1(API 11)版本開始,HarmonyOS SDK以Kit維度提供豐富、完備的開放能力,涵蓋應用框架、系統、媒體、圖形、應用服務
    發表于 06-26 10:47
    主站蜘蛛池模板: 一区精品视频 | 日本三级理论 | 欧美视频一区二区三区在线观看 | 国产综合色精品一区二区三区 | 免费观看影院 | 躁天天躁中文字幕在线 | 伊人久久大香线蕉综合爱婷婷 | 久久综合九色综合精品 | 亚洲人成电影在线 | 午夜影吧 | 九九热精品在线 | 亚洲综合色吧 | 全免费一级毛片在线播放 | videos另类重口tv | 男人和女人做免费做爽爽视频 | 日本高清视频在线www色 | 日本一道高清不卡免费 | 老司机亚洲精品影院在线 | 免费一级毛片在级播放 | 欧美日韩一卡2卡三卡4卡新区 | 免费播放黄色 | 性欧美17一18sex性高清 | 欧美成人伊人久久综合网 | 久热精品在线视频 | 性欧美护士18xxxxhd视频 | 在线免费观看毛片网站 | 国产一级在线观看www色 | 久久天天躁狠狠躁夜夜免费观看 | 天天狠天天操 | 三级黄色在线视频中文 | 资源在线www天堂 | 97色爱| 免费一区二区视频 | 中国一级做a爰片久久毛片 中韩日欧美电影免费看 | 5g影院天天| 男女交性视频免费 | 丁香婷婷影院 | 在线看av网址 | 亚洲一区二区三区免费观看 | 天天夜夜狠狠 | 四虎在线最新地址公告 |