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

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

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

自定義HarmonyOS啟動(dòng)頁(yè)組件

ITMING ? 來(lái)源:ITMING ? 作者:ITMING ? 2023-02-17 13:00 ? 次閱讀

啟動(dòng)頁(yè)作為應(yīng)用程序首次出現(xiàn)的頁(yè)面,該頁(yè)面提供一些預(yù)加載數(shù)據(jù)的提前獲取,防止應(yīng)用程序出現(xiàn)白屏等異常,如是否第一次訪問(wèn)應(yīng)用程序并開(kāi)啟應(yīng)用歡迎頁(yè);判斷用戶(hù)登錄信息進(jìn)行頁(yè)面跳轉(zhuǎn);消息信息懶加載等。

常見(jiàn)啟動(dòng)頁(yè)參數(shù)如下表所示:

屬性 類(lèi)型 描述 必填
timer number 倒計(jì)時(shí)時(shí)長(zhǎng),默認(rèn)3秒 Y
isLogo boolean 顯示圖片類(lèi)型。
false:常規(guī)圖,默認(rèn);
true:logo圖
N
backgroundImg ResourceStr 顯示圖片地址 N
companyName string 企業(yè)名稱(chēng) N
mfontColor ResourceColor 企業(yè)名稱(chēng)字體顏色 N

常見(jiàn)啟動(dòng)頁(yè)方法如下表所示:

方法 類(lèi)型 描述 必填
skip void 跳轉(zhuǎn)方法 Y

封裝啟動(dòng)頁(yè)參數(shù)類(lèi)代碼如下所示:

export class Splash {
  // 倒計(jì)時(shí)時(shí)長(zhǎng)
  timer: number;
  // 顯示Logo
  isLogo?: boolean = false;
  // 頁(yè)面顯示圖片
  backgroundImg?: ResourceStr;
  // 企業(yè)名稱(chēng)
  companyName?: string;
  // 企業(yè)名稱(chēng)字體顏色
  mFontColor?: ResourceColor;

  constructor(timer: number, isLogo?: boolean, backgroundImg?: ResourceStr,
              companyName?: string, mFontColor?: ResourceColor) {
    this.timer = timer;
    this.isLogo = isLogo;
    this.backgroundImg = backgroundImg;
    this.companyName = companyName;
    this.mFontColor = mFontColor;
  }
}

自定義啟動(dòng)頁(yè)組件代碼如下所示:

@Component
export struct SplashPage {

  @State mSplash: Splash = new Splash(3);

  // 跳轉(zhuǎn)方法
  skip: () => void;

  build() {
    // 底部企業(yè)名稱(chēng)顯示堆疊組件
    Stack({ alignContent: Alignment.Bottom }) {
      // 圖片和倒計(jì)時(shí)跳轉(zhuǎn)頁(yè)面堆疊組件
      Stack({ alignContent: Alignment.TopEnd }) {
        if (this.mSplash.isLogo) {
          Image(this.mSplash.backgroundImg).objectFit(ImageFit.None)
        }
        Button(`跳過(guò) | ${this.mSplash.timer} s`, { type: ButtonType.Normal })
          .height(42)
          .padding({ left: 16, right: 16 })
          .margin({ top: 16, right: 16 })
          .fontSize(16).fontColor(Color.White)
          .backgroundColor(Color.Gray)
          .borderRadius(8)
          .onClick(() => {
            this.skip();
          })
      }
      .backgroundImage(this.mSplash.isLogo ? null : this.mSplash.backgroundImg)
      .backgroundImageSize(this.mSplash.isLogo ? null : { width: '100%', height: '100%' })
      .width('100%').height('100%')
      if (this.mSplash.companyName) {
        Text(this.mSplash.companyName)
          .width('100%').height(54)
          .fontColor(this.mSplash.mFontColor)
          .fontSize(14).fontWeight(FontWeight.Bold)
          .textAlign(TextAlign.Center)
      }
    }
    .width('100%').height('100%')
  }

  aboutToAppear() {
    // 倒計(jì)時(shí)處理
    let skipWait = setInterval(() => {
      this.mSplash.timer--;
      if (this.mSplash.timer === 0) {
        clearInterval(skipWait);
        this.skip();
      }
    }, 1000)
  }
}

自定義組件定義完成后,還需要在模塊的index.ets中將組件導(dǎo)出,代碼如下所示:

export { Splash, SplashPage } from './src/main/ets/components/splashpage/SplashPage';

在entry模塊引入自定義模塊teui,打開(kāi)entry目錄下的package.json并在dependencies依賴(lài)列中加入如下代碼:

"@tetcl/teui": "file:../teui"

注:其中"@tetcl/teui"中"tetcl/teui"需要和自定義模塊teui中package.json中name屬性一致。若提交到npm中心倉(cāng)可直接使用"@tetcl/teui": "版本號(hào)"方式引入。引入完成后需要執(zhí)行編輯器上的Sync now或者npm install進(jìn)行下載同步。

在具體的頁(yè)面中導(dǎo)入自定義啟動(dòng)頁(yè)組件代碼如下所示:

import { Splash as SplashObj, SplashPage } from '@tetcl/teui'
import router from '@ohos.router';

注:為了和頁(yè)面名稱(chēng)不沖突,對(duì)Splash作別名處理。

在頁(yè)面中引入自定義組件SplashPage并填寫(xiě)相關(guān)屬性值及跳轉(zhuǎn)方法,代碼如下所示:

@Entry
@Component
struct Splash {

  // 跳轉(zhuǎn)到Index頁(yè)面
  onSkip() {
    router.replaceUrl({
      url: 'pages/Index'
    })
  }

  build() {
    Row() {
      SplashPage({ mSplash: new SplashObj(5, true, $r('app.media.icon'),
        'xxxx有限公司', 0x666666), skip: this.onSkip})
      // 常規(guī)圖
      // SplashPage({ mSplash: new SplashObj(5, false, $r('app.media.default_bg'), 
      //  'xxxx有限公司', 0xF5F5F5), skip: this.onSkip})
    }
    .height('100%')
  }
}

預(yù)覽效果如下圖所示:

自定義HarmonyOS啟動(dòng)頁(yè)組件-開(kāi)源基礎(chǔ)軟件社區(qū)自定義HarmonyOS啟動(dòng)頁(yè)組件-開(kāi)源基礎(chǔ)軟件社區(qū)

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

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68948
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1982

    瀏覽量

    30479
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS開(kāi)發(fā)實(shí)例:【自定義Emitter】

    使用[Emitter]實(shí)現(xiàn)事件的訂閱和發(fā)布,使用[自定義彈窗]設(shè)置廣告信息。
    的頭像 發(fā)表于 04-14 11:37 ?1048次閱讀
    <b class='flag-5'>HarmonyOS</b>開(kāi)發(fā)實(shí)例:【<b class='flag-5'>自定義</b>Emitter】

    HarmonyOS開(kāi)發(fā)案例:【 自定義彈窗】

    基于ArkTS的聲明式開(kāi)發(fā)范式實(shí)現(xiàn)了三種不同的彈窗,第一種直接使用公共組件,后兩種使用CustomDialogController實(shí)現(xiàn)自定義彈窗
    的頭像 發(fā)表于 05-16 18:18 ?1443次閱讀
    <b class='flag-5'>HarmonyOS</b>開(kāi)發(fā)案例:【 <b class='flag-5'>自定義</b>彈窗】

    講解一下HarmonyOS中的幾個(gè)自定義組件用到的知識(shí)

    HarmonyOS 的 Component 組件對(duì)外提供了一個(gè) DrawTask 接口,通過(guò) addDrawTask 方法為組件添加一個(gè) DrawTask,讓開(kāi)發(fā)者可以進(jìn)行自定義繪制邏
    發(fā)表于 03-16 16:05

    OpenHarmony自定義組件介紹

    觀察到了變化,將啟動(dòng)重新渲染。 2.根據(jù)框架持有的兩個(gè)map(自定義組件的創(chuàng)建和渲染流程中第4步),框架可以知道該狀態(tài)變量管理了哪些UI組件,以及這些UI
    發(fā)表于 09-25 15:36

    鴻蒙上自定義組件的過(guò)程

    ?? 在實(shí)際開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到一些系統(tǒng)原有組件無(wú)法滿(mǎn)足的情況,而 HarmonyOS 提供了自定義組件的方式,我們使用自定義
    的頭像 發(fā)表于 11-10 09:27 ?2965次閱讀
    鴻蒙上<b class='flag-5'>自定義</b><b class='flag-5'>組件</b>的過(guò)程

    HarmonyOS 中的幾個(gè)自定義控件介紹

    HarmonyOS 開(kāi)發(fā)自定義組件目前還不是很豐富,在開(kāi)發(fā)過(guò)程中常常會(huì)有一些特殊效果的組件,這就需要我們額外花一些時(shí)間實(shí)現(xiàn)。
    的頭像 發(fā)表于 01-04 13:49 ?2304次閱讀

    OpenHarmony自定義組件:ClearableInput和Keyboard

    組件介紹: 本示例包含了兩個(gè)OpenHarmony自定義組件,一個(gè)是ClearableInput,另一個(gè)是Keyboard。 ClearableInput 定義了一個(gè)帶清空?qǐng)D標(biāo)的文本輸
    發(fā)表于 03-18 15:21 ?1次下載
    OpenHarmony<b class='flag-5'>自定義</b><b class='flag-5'>組件</b>:ClearableInput和Keyboard

    OpenHarmony自定義組件FlowImageLayout

    組件介紹 本示例是OpenHarmony自定義組件FlowImageLayout。 用于將一個(gè)圖片列表以瀑布流的形式顯示出來(lái)。 調(diào)用方法
    發(fā)表于 03-21 10:17 ?3次下載
    OpenHarmony<b class='flag-5'>自定義</b><b class='flag-5'>組件</b>FlowImageLayout

    OpenHarmony自定義組件ProgressWithText

    組件介紹 本示例是OpenHarmony自定義組件ProgressWithText。 在原來(lái)進(jìn)度條的上方加了一個(gè)文本框,動(dòng)態(tài)顯示當(dāng)前進(jìn)度并調(diào)整位置。 調(diào)用方法
    發(fā)表于 03-23 14:03 ?1次下載
    OpenHarmony<b class='flag-5'>自定義</b><b class='flag-5'>組件</b>ProgressWithText

    OpenHarmony自定義組件CircleProgress

    組件介紹 本示例是OpenHarmony自定義組件CircleProgress。 用于定義一個(gè)帶文字的圓形進(jìn)度條。 調(diào)用方法
    發(fā)表于 03-23 14:06 ?4次下載
    OpenHarmony<b class='flag-5'>自定義</b><b class='flag-5'>組件</b>CircleProgress

    適用于鴻蒙的自定義組件框架Carbon案例教程

    項(xiàng)目名稱(chēng):Carbon 所屬系列:ohos的第三方組件適配移植 功能:一個(gè)適用于鴻蒙的自定義組件框架,幫助快速實(shí)現(xiàn)各種需要的效果 項(xiàng)目移植狀態(tài):大部分移植 調(diào)用差異:基本沒(méi)有使用差異,可以參照
    發(fā)表于 04-07 09:49 ?5次下載

    自定義視圖組件教程案例

    自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖b
    發(fā)表于 04-08 10:48 ?14次下載

    添加自定義屬性控制fridaserver啟動(dòng)和停止

    添加自定義屬性控制fridaserver啟動(dòng)和停止
    的頭像 發(fā)表于 08-09 10:08 ?1825次閱讀
    添加<b class='flag-5'>自定義</b>屬性控制fridaserver<b class='flag-5'>啟動(dòng)</b>和停止

    鴻蒙ArkUI實(shí)例:【自定義組件

    組件是 OpenHarmony 頁(yè)面最小顯示單元,一個(gè)頁(yè)面可由多個(gè)組件組合而成,也可只由一個(gè)組件組合而成,這些組件可以是ArkUI開(kāi)發(fā)框架自帶系統(tǒng)
    的頭像 發(fā)表于 04-08 10:17 ?696次閱讀

    HarmonyOS開(kāi)發(fā)案例:【UIAbility和自定義組件生命周期】

    本文檔主要描述了應(yīng)用運(yùn)行過(guò)程中UIAbility和自定義組件的生命周期。對(duì)于UIAbility,描述了Create、Foreground、Background、Destroy四種生命周期。對(duì)于頁(yè)面
    的頭像 發(fā)表于 05-10 15:31 ?1327次閱讀
    <b class='flag-5'>HarmonyOS</b>開(kāi)發(fā)案例:【UIAbility和<b class='flag-5'>自定義</b><b class='flag-5'>組件</b>生命周期】