自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

通過(guò)電競(jìng)快覽應(yīng)用學(xué)ArkUI

系統(tǒng)
ArkUI是一套構(gòu)建HarmonyOS應(yīng)用界面的聲明式UI開發(fā)框架。它使用極簡(jiǎn)的UI信息語(yǔ)法、豐富的UI組件、以及實(shí)時(shí)預(yù)覽工具,幫助您提升HarmonyOS應(yīng)用界面開發(fā)效率30%。

[[435101]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

為了能夠進(jìn)一步對(duì)OpenHarmony3.0內(nèi)置應(yīng)用做修改,我需要先掌握ArkUI聲明式開發(fā)范式的相關(guān)知識(shí)。通過(guò)電競(jìng)快覽應(yīng)用示例能夠快速學(xué)習(xí)ArkUI聲明式開發(fā),并對(duì)相關(guān)知識(shí)點(diǎn)進(jìn)行擴(kuò)展學(xué)習(xí),最終達(dá)到對(duì)組件、布局、動(dòng)效和數(shù)據(jù)狀態(tài)管理的初步掌握,并將最終的健康飲食應(yīng)用程序安裝到燒錄了OpenHarmony3.0的Hi3516開發(fā)板上。

ArkUI是一套構(gòu)建HarmonyOS應(yīng)用界面的聲明式UI開發(fā)框架。它使用極簡(jiǎn)的UI信息語(yǔ)法、豐富的UI組件、以及實(shí)時(shí)預(yù)覽工具,幫助您提升HarmonyOS應(yīng)用界面開發(fā)效率30%。您只需使用一套TS/JS API,就能在多個(gè)HarmonyOS設(shè)備上提供生動(dòng)而流出的用戶界面體驗(yàn)。 ——引自HarmonyOS應(yīng)用開發(fā)官網(wǎng)

準(zhǔn)備

  1. DevEco Studio 3.0 Beta1
  2. OpenHarmony SDK 3.0
  3. 數(shù)據(jù)來(lái)源于天行數(shù)據(jù)API

通過(guò)電競(jìng)快覽應(yīng)用學(xué)ArkUI

1. 創(chuàng)建電競(jìng)快覽應(yīng)用(OpenHarmony版)

配置OpenHarmony SDK

打開DevEco Studio,點(diǎn)擊左下角Configure,選擇Setting進(jìn)入設(shè)置界面。在SDK Manager菜單下選擇OpenHarmony SDK,自定義存放路徑,并勾選安裝Platforms下的SDK及Tools下的Previewer和Toolchains。

【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)
【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)

點(diǎn)擊Create Project創(chuàng)建項(xiàng)目

在Choose Your Ability Template界面下拉到最底部,選擇[Standard]Empty Ability模板

【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)

配置工程界面完善項(xiàng)目信息

【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)

Project name:項(xiàng)目名稱

Project type:項(xiàng)目類型

Bundle name:包名稱

Save location:項(xiàng)目保存地址

Language:選擇編程語(yǔ)言(eTS)

Compatible API version:選擇兼容版本(API Version 7)

Device type:設(shè)備類型(Phone)

點(diǎn)擊Finish,等待項(xiàng)目構(gòu)建完成。

目錄結(jié)構(gòu)說(shuō)明

【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)

app.ets 全局應(yīng)用邏輯和應(yīng)用生命周期管理。

pages 存放所有組件頁(yè)面。

common 存放公共代碼(可選)。

resources 存放資源配置文件。

刪除config.json文件中js -> pages標(biāo)簽下的pages/second

刪除index.ets文件中的一些代碼,如圖所示:

【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)

刪除second.ets文件

2. 術(shù)語(yǔ)

認(rèn)識(shí)@Entry

用@Entry裝飾的自定義組件用作頁(yè)面的默認(rèn)入口組件,加載頁(yè)面時(shí),將首先創(chuàng)建并呈現(xiàn)@Entry裝飾的自定義組件。單個(gè)源文件中,可以存在多個(gè)自定義組件,但最多可以使用@Entry裝飾一個(gè)自定義組件。

認(rèn)識(shí)@Component

在聲明式UI中,所有的頁(yè)面都是由組件構(gòu)成。使用@Component裝飾的struct表示該結(jié)構(gòu)體具有組件化能力,能夠成為一個(gè)獨(dú)立的組件,這種類型的組件也稱為自定義組件。

build函數(shù)

build函數(shù)用于定義組件的聲明式UI描述。

認(rèn)識(shí)@Builder

@Builder裝飾器定義了一個(gè)如何渲染自定義組件的方法。通過(guò)其可以在一個(gè)自定義組件內(nèi)快速生成多個(gè)布局內(nèi)容。比如要在一個(gè)頁(yè)面顯示多個(gè)名稱,使用多個(gè)Text組件顯得代碼臃腫且冗余,使用@Builder定義一個(gè)公用的方法,在組件中引入,代碼量少且達(dá)到了復(fù)用。

3. 構(gòu)建電競(jìng)新聞列表

【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)

由圖可知,整個(gè)界面分為上下兩部分,上部分顯示標(biāo)題欄,下部分顯示電競(jìng)新聞列表。

頁(yè)面中使用的組件

1)Column組件

Column組件是容器組件,是沿垂直方向布局的容器。相對(duì)的就存在沿水平方向布局的容器,其為Row組件,這兩個(gè)組件我將它們定位為線性布局容器。

可以通過(guò)alignItems屬性來(lái)設(shè)置子組件在水平方向上的對(duì)齊格式。提供了Start、Center、End三種對(duì)齊方式。

  1. Column() { 
  2.     //子組件 
  3. .alignItems(HorizontalAlign.Center) 

 2)Flex組件

Flex是彈性布局組件,其提供五個(gè)屬性來(lái)控制子組件的顯示方式。

  1. Flex({direction: FlexDirection.Row,wrap: FlexWrap.NoWrap, justifyContent: FlexAlign.Start, alignItems: ItemAlign.Stretch, alginContent: FlexAlign.Start}) 

 direction:描述子組件在Flex容器上排列的方向,即主軸方向,也就是子組件是以橫向排列還是縱向排列。

FlexDirection.Row:橫向(行方向)排列,從行起始位置開始。

FlexDirection.RowReverse:橫向(行方向)排列,與Row方向相反,即從行尾開始排列。

FlexDirection.Column:縱向(列方向)排列,從列起始位置開始。

FlexDirection.ColumnReverse:縱向(列方向)排列,與Column方向相反,即從列尾開始排列。

  1. Flex({direction: FlexDirection.Row}) {} 
  2. Flex({direction: FlexDirection.RowReverse}) {} 
  3. Flex({direction: FlexDirection.Column}) {} 
  4. Flex({direction: FlexDirection.ColumnReverse}) {} 
【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)

wrap: Flex容器中子組件是單行/列還是多行/列排列。

justifyContent:子組件在Flex容器主軸上的對(duì)齊格式。

alignItems:子組件在Flex容器交叉軸上的對(duì)齊格式。

alignContent:交叉軸中有額外的空間時(shí),多行內(nèi)容的對(duì)齊方式。僅在wrap為Wrap或WrapReverse下生效。

3)List組件

List組件用于顯示一系列相同寬度的列表項(xiàng),比如顯示新聞列表、商品列表等。List組件和ListItem組件一起使用。ListItem用于展示具體的數(shù)據(jù)項(xiàng)。

  1. List() { 
  2.     ListItem() { 
  3.       //組合數(shù)據(jù)項(xiàng) 
  4.     } 
  5.     ListItem() { 
  6.       //組合數(shù)據(jù)項(xiàng) 
  7.     } 

 4)Text組件

Text用于呈現(xiàn)一段信息。

  1. Text(){} 

 5)Image組件

Image組件用于渲染展示圖片。

  1. Image(){} 

通用組件屬性和事件

width():設(shè)置組件自身的寬度。

height():設(shè)置組件自身的高度。

margin():設(shè)置外邊距屬性。

padding():設(shè)置內(nèi)邊距屬性。

backgroundColor:設(shè)置組件的背景色。

borderRadius:設(shè)置元素的邊框圓角半徑。

和搭積木一樣,把需要的組件組裝到一起,完成列表頁(yè)的構(gòu)建。

  1. import router from '@system.router'
  2. import {ESports} from '../model/ESports.ets'
  3. import {initOnStartup} from '../model/ESportsList.ets'
  4.  
  5.  
  6. @Component 
  7. struct ESportsListItem { 
  8.   private eSportsItem: ESports 
  9.   build() { 
  10.     Flex({justifyContent:FlexAlign.Start, alignItems: ItemAlign.Center}) { 
  11.       Image(this.eSportsItem.picUrl) 
  12.         .objectFit(ImageFit.Contain) 
  13.         .height('100%'
  14.         .width(120) 
  15.         .margin({right: 16, left: 16}) 
  16.       Column() { 
  17.         Text(this.eSportsItem.title) 
  18.           .fontSize(14) 
  19.           .fontWeight(FontWeight.Bold) 
  20.           .maxLines(1) 
  21.           .textOverflow({overflow: TextOverflow.Ellipsis}) 
  22.         Text(this.eSportsItem.description) 
  23.           .fontSize(12) 
  24.           .fontColor('#cccccc'
  25.           .maxLines(2) 
  26.           .textOverflow({overflow: TextOverflow.Ellipsis}) 
  27.           .margin({top: 10}) 
  28.       } 
  29.       .padding(4) 
  30.     } 
  31.     .height(100) 
  32.     .backgroundColor(0xF5F5F5) 
  33.     .borderRadius(8) 
  34.   } 
  35.  
  36. @Entry 
  37. @Component 
  38. struct Index { 
  39.   private eSportsItems: ESports[] = initOnStartup() 
  40.   build() { 
  41.     Column() { 
  42.       Flex({justifyContent: FlexAlign.Start, alignItems: ItemAlign.Center}) { 
  43.         Text('電競(jìng)快覽'
  44.           .fontSize(20) 
  45.           .fontWeight(FontWeight.Bold) 
  46.           .margin(20) 
  47.       } 
  48.       List({space: 4, initialIndex: 0}) { 
  49.         ForEach(this.eSportsItems, item => { 
  50.           ListItem() { 
  51.             ESportsListItem({eSportsItem: item}) 
  52.           } 
  53.           .onClick(() => { 
  54.             router.push({ 
  55.               uri: 'pages/content'
  56.               params: {eSports: item} 
  57.             }) 
  58.           }) 
  59.         }, item => item.id.toString()) 
  60.       } 
  61.       .width('96%'
  62.     } 
  63.     .width("100%"
  64.     .height("100%"
  65.     .backgroundColor(0xE5E5E5) 
  66.     .padding({top: 5}) 
  67.   } 

4. 構(gòu)建電競(jìng)新聞內(nèi)容

【圖爾科技(寧)】電競(jìng)快覽(ArkUI版)-鴻蒙HarmonyOS技術(shù)社區(qū)
  1. import router from '@system.router'
  2. import {ESports} from '../model/ESports.ets'
  3.  
  4.  
  5. @Component 
  6. struct PageTitle { 
  7.   private eSports: ESports; 
  8.   build() { 
  9.     Flex({alignItems: ItemAlign.Start}) { 
  10.       Image($r('app.media.back')) 
  11.         .width(20) 
  12.         .height('100%'
  13.       Text(this.eSports.title) 
  14.         .height('100%'
  15.         .fontSize(16) 
  16.         .fontWeight(FontWeight.Bold) 
  17.         .maxLines(1) 
  18.         .textOverflow({overflow: TextOverflow.Ellipsis}) 
  19.         .margin({left: 16}) 
  20.     } 
  21.     .height(61) 
  22.     .backgroundColor('#FFedf2f5'
  23.     .padding({top: 13, bottom: 14, left: 12}) 
  24.     .onClick(() => { 
  25.       router.back(); 
  26.     }) 
  27.   } 
  28.  
  29.  
  30. @Entry 
  31. @Component 
  32. struct Content { 
  33.   private eSports: ESports = router.getParams().eSports; 
  34.   build() { 
  35.     Column() { 
  36.       Stack({alignContent: Alignment.TopStart}) { 
  37.         PageTitle({eSports: this.eSports}) 
  38.       } 
  39.       Column() { 
  40.         Text(this.eSports.title) 
  41.           .width('80%'
  42.           .fontSize(14) 
  43.           .fontWeight(FontWeight.Bold) 
  44.           .maxLines(2) 
  45.           .textOverflow({overflow: TextOverflow.Ellipsis}) 
  46.           .textAlign(TextAlign.Center) 
  47.           .padding({top: 8, bottom: 8}) 
  48.         Row({space: 12}) { 
  49.           Text(this.eSports.source) 
  50.             .fontSize(12) 
  51.             .fontColor('#CCCCCC'
  52.           Text(this.eSports.ctime) 
  53.             .fontSize(12) 
  54.             .fontColor('#CCCCCC'
  55.         } 
  56.         .margin({top: 5, bottom: 10}) 
  57.         Text(this.eSports.description) 
  58.           .width('90%'
  59.           .height(80) 
  60.           .lineHeight(20) 
  61.           .fontSize(12) 
  62.           .maxLines(5) 
  63.           .textOverflow({overflow: TextOverflow.Ellipsis}) 
  64.           .borderRadius(10) 
  65.           .backgroundColor(0xE5E5E5) 
  66.           .padding(10) 
  67.  
  68.       } 
  69.     } 
  70.     .alignItems(HorizontalAlign.Center) 
  71.     .height('100%'
  72.     .width('100%'
  73.   } 

這里預(yù)留一個(gè)思考題:

新聞內(nèi)容是使用文本編輯器或者直接使用的是URL鏈接地址,如何讓它能夠在頁(yè)面中直接顯示?

想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2015-03-25 10:41:28

2012-11-12 13:37:48

RHEV電源管理

2020-12-03 12:40:38

快應(yīng)用風(fēng)銳獎(jiǎng)流量

2010-08-16 14:17:46

無(wú)線路由

2013-11-25 09:44:19

2019-06-04 15:14:43

iOS 13蘋果手機(jī)

2018-05-09 15:16:46

電競(jìng)顯示器外觀

2021-01-22 18:28:21

順豐華為

2023-08-17 15:04:22

2020-05-08 11:12:58

惡意軟件PC安全終端安全

2023-04-18 18:59:13

2021-04-08 21:32:38

華為快應(yīng)用Serverless

2019-01-23 17:08:03

開發(fā)

2024-06-13 08:15:00

2020-10-30 09:41:44

鴻蒙Hi3861WiFi小車

2020-11-03 11:39:22

wifi小車

2022-03-14 15:36:34

Row容器組件Column容器組件鴻蒙

2019-03-20 23:39:16

快應(yīng)用開發(fā)者

2022-06-08 14:29:00

大數(shù)據(jù)數(shù)字化疫情防控

2022-03-10 14:57:35

ArkUIets項(xiàng)目開發(fā)鴻蒙
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)