偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

通過電競快覽應用學ArkUI

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

[[435101]]

想了解更多內容,請訪問:

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

https://harmonyos.51cto.com

前言

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

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

準備

  1. DevEco Studio 3.0 Beta1
  2. OpenHarmony SDK 3.0
  3. 數據來源于天行數據API

通過電競快覽應用學ArkUI

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

配置OpenHarmony SDK

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

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

點擊Create Project創(chuàng)建項目

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

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

配置工程界面完善項目信息

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

Project name:項目名稱

Project type:項目類型

Bundle name:包名稱

Save location:項目保存地址

Language:選擇編程語言(eTS)

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

Device type:設備類型(Phone)

點擊Finish,等待項目構建完成。

目錄結構說明

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

app.ets 全局應用邏輯和應用生命周期管理。

pages 存放所有組件頁面。

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

resources 存放資源配置文件。

刪除config.json文件中js -> pages標簽下的pages/second

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

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

刪除second.ets文件

2. 術語

認識@Entry

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

認識@Component

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

build函數

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

認識@Builder

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

3. 構建電競新聞列表

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

由圖可知,整個界面分為上下兩部分,上部分顯示標題欄,下部分顯示電競新聞列表。

頁面中使用的組件

1)Column組件

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

可以通過alignItems屬性來設置子組件在水平方向上的對齊格式。提供了Start、Center、End三種對齊方式。

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

 2)Flex組件

Flex是彈性布局組件,其提供五個屬性來控制子組件的顯示方式。

  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}) {} 
【圖爾科技(寧)】電競快覽(ArkUI版)-鴻蒙HarmonyOS技術社區(qū)

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

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

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

alignContent:交叉軸中有額外的空間時,多行內容的對齊方式。僅在wrap為Wrap或WrapReverse下生效。

3)List組件

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

  1. List() { 
  2.     ListItem() { 
  3.       //組合數據項 
  4.     } 
  5.     ListItem() { 
  6.       //組合數據項 
  7.     } 

 4)Text組件

Text用于呈現一段信息。

  1. Text(){} 

 5)Image組件

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

  1. Image(){} 

通用組件屬性和事件

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

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

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

padding():設置內邊距屬性。

backgroundColor:設置組件的背景色。

borderRadius:設置元素的邊框圓角半徑。

和搭積木一樣,把需要的組件組裝到一起,完成列表頁的構建。

  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('電競快覽'
  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. 構建電競新聞內容

【圖爾科技(寧)】電競快覽(ArkUI版)-鴻蒙HarmonyOS技術社區(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.   } 

這里預留一個思考題:

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

想了解更多內容,請訪問:

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

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區(qū)
相關推薦

2015-03-25 10:41:28

2012-11-12 13:37:48

RHEV電源管理

2020-12-03 12:40:38

快應用風銳獎流量

2024-06-13 08:15:00

2010-08-16 14:17:46

無線路由

2022-03-10 14:57:35

ArkUIets項目開發(fā)鴻蒙

2013-11-25 09:44:19

2024-01-11 15:54:55

eTS語言TypeScript應用開發(fā)

2019-06-04 15:14:43

iOS 13蘋果手機

2023-08-17 15:04:22

2021-01-22 18:28:21

順豐華為

2019-01-23 17:08:03

開發(fā)

2021-04-08 21:32:38

華為快應用Serverless

2018-05-09 15:16:46

電競顯示器外觀

2022-12-22 13:35:22

開發(fā)應用

2023-04-18 18:59:13

2020-05-08 11:12:58

惡意軟件PC安全終端安全

2022-03-17 16:04:16

Text文本組件Button組件Column

2019-03-20 23:39:16

快應用開發(fā)者

2022-06-08 14:29:00

大數據數字化疫情防控
點贊
收藏

51CTO技術棧公眾號