国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

這篇具有很好參考價值的文章主要介紹了手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?、移動應(yīng)?開發(fā)的介紹

移動應(yīng)?開發(fā):

  • Android
  • IOS
  • HarmonyOS (鴻蒙)

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

?、HarmonyOS介紹

文檔概覽-HarmonyOS應(yīng)用開發(fā)官網(wǎng)

2.1 系統(tǒng)的定義

2.1.1 系統(tǒng)的定位

HarmonyOS有三?特征:

  • 搭載該操作系統(tǒng)的設(shè)備在系統(tǒng)層?融為?體、形成超級終端,讓設(shè)備的硬件能?可以彈性 擴展,實現(xiàn)設(shè)備之間 硬件互助,資源共享。 對消費者??,HarmonyOS能夠?qū)?活場景中的各類終端進?能?整合,實現(xiàn)不同終端 設(shè)備之間的快速連接、能?互助、資源共享,匹配合適的設(shè)備、提供流暢的全場景體驗。
  • ?向開發(fā)者,實現(xiàn)?次開發(fā),多端部署。 對應(yīng)?開發(fā)者??,HarmonyOS采?了多種分布式技術(shù),使應(yīng)?開發(fā)與不同終端設(shè)備的 形態(tài)差異?關(guān),從?讓開發(fā)者能夠聚焦上層業(yè)務(wù)邏輯,更加便捷、?效地開發(fā)應(yīng)?。
  • ?套操作系統(tǒng)可以滿?不同能?的設(shè)備需求,實現(xiàn)統(tǒng)?OS,彈性部署。 對設(shè)備開發(fā)者??,HarmonyOS采?了組件化的設(shè)計?案,可根據(jù)設(shè)備的資源能?和業(yè) 務(wù)特征靈活裁剪,滿?不同形態(tài)終端設(shè)備對操作系統(tǒng)的要求。

2.1.2 系統(tǒng)架構(gòu)

  • 內(nèi)核層:提供?機操作系統(tǒng)的基礎(chǔ)能?。HarmonyOS采?多內(nèi)核的系統(tǒng)設(shè)計,基于 Linux內(nèi)核、LiteOS,使?了Linux的微內(nèi)核(使?了Linux的最簡功 能)
    • Linux內(nèi)核: ?機操作系統(tǒng)的內(nèi)核
    • LiteOS內(nèi)核:智能硬件的內(nèi)核
  • 系統(tǒng)服務(wù)層:HarmonyOS的核?能?集合,這些能?是有系統(tǒng)本身決定的,為我們應(yīng)? 開發(fā)提供了服務(wù)調(diào)?功能。系統(tǒng)服務(wù)層提供的能?是可以被我們開發(fā)的應(yīng)?進?調(diào)?的。
  • 框架層:為HarmonyOS的應(yīng)?開發(fā)提供了不同語?程序調(diào)?的接?

2.2 鴻蒙發(fā)展史

2.2.1 “鴻蒙”

盤古開天辟地——??混沌(鴻蒙時代) ?志要在?機系統(tǒng)的國產(chǎn)化道路上開天辟地

2.2.2 發(fā)展史

  • 2012年,華為開始規(guī)劃智能操作系統(tǒng)“鴻蒙”
  • 2019年5?,華為申請“鴻蒙”商標
  • 2019年5?17?,發(fā)布鴻蒙系統(tǒng)
  • 2019年8?,鴻蒙正式版發(fā)布,實?開源
  • 2020年9?,鴻蒙2.0(beta)
  • 2021年6?2?晚上,華為線上發(fā)布HarmonyOS 2.0---?機

2.3 鴻蒙與安卓的區(qū)別

2.3.1 內(nèi)核

  • 安卓:基于Linux的內(nèi)核設(shè)計,對Linux的依賴很?(也就是說Android操作系統(tǒng)?多數(shù)功能都 是依賴Linux)
  • 鴻蒙:采?了多內(nèi)核設(shè)計,Linux內(nèi)核+LiteOS內(nèi)核,操作系統(tǒng)最?限度的依賴Linux內(nèi)核

2.3.2 運?效率

  • 安卓:應(yīng)?的運?是基于虛擬機的 (Java---JDK編譯器---字節(jié)碼---虛擬機---操作系統(tǒng))

  • 鴻蒙:??編譯器 (Java----??編譯器---機器碼---操作系統(tǒng))

據(jù)說, 鴻蒙系統(tǒng)運?效率相較于安卓提升了50%+

2.4 技術(shù)特性 與 系統(tǒng)安全

2.4.1 技術(shù)特性

  • 硬件互助,資源共享
  • ?次開發(fā),多端部署
  • 統(tǒng)?OS,彈性部署

2.4.2 系統(tǒng)安全

  • 正確的?:?效安全的?戶身份識別
  • 正確的設(shè)備:設(shè)備的識別
  • 正確的使?數(shù)據(jù):數(shù)據(jù)的安全

三、第?個鴻蒙應(yīng)?

3.1 開發(fā)準備

3.1.1 開發(fā)環(huán)境搭建(Java)

  • 安裝JDK、配置環(huán)境變量
  • 下載安裝DevEco Studio集成開發(fā)環(huán)境(基于Idea開發(fā)的專??于鴻蒙應(yīng)?開發(fā)的IDE)

下載地址

華為操作系統(tǒng)DevEco Studio和SDK下載與升級 | HarmonyOS開發(fā)者

安裝

  • 運行安裝包
  • 點擊Next
  • 選擇安裝目錄
  • 創(chuàng)建桌面快捷方式
  • 開始安裝

運行DevEco Studio

第一次啟動開發(fā)環(huán)境會下載鴻蒙開發(fā)所需要的SDK
  • 雙擊桌?快捷?式,打開DevEco Studio
  • 開始使?
  • 選擇SDK?錄
  • 點擊Next進?下?步
  • 選擇Accept,點擊Next開始下載SDK
  • 點擊Finish完成下載,開始使?

3.1.2 注冊華為帳號

注冊_華為帳號 (huawei.com)

3.2 創(chuàng)建鴻蒙應(yīng)?

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

3.3 鴻蒙應(yīng)??錄結(jié)構(gòu)

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

3.4 運?項?

3.4.1 啟動鴻蒙模擬器

  • Tools—Device Manager
  • 在彈出的窗?裝點擊 Login 按鈕,登錄華為帳號
  • 啟動?個模擬器

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

3.5 鴻蒙應(yīng)?的啟動流程

3.5.1 config.json

config.json 是鴻蒙應(yīng)?的主配置?件

  • app 配置 :定義當(dāng)前應(yīng)?的唯?標識
    • bundleName應(yīng)用的唯一標識(一般包名用公司名+應(yīng)用名稱)
    • version 應(yīng)?的版本
  • module 配置: ?于聲明當(dāng)前應(yīng)?的信息(包、主類、主界?、功能模塊聲明、適配設(shè) 備類型等等)
    • mainAbility聲明當(dāng)前應(yīng)用啟動時默認加載的Ability

    • deviceType聲明當(dāng)前應(yīng)用適配的設(shè)備類型

    • abilities 聲明當(dāng)前應(yīng)?中每個ability的配置信息

      • 創(chuàng)建一個ability那么在config.json中會自動生成對應(yīng)的ability的配置信息。

      手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

      手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

3.5.2 應(yīng)?啟動流程

  • 啟動鴻蒙應(yīng)?加載config.json?件,根據(jù)?mainAbility?配置加載啟動應(yīng)?的主界?

    "mainAbility": "com.example.myapplication.demo01.MainAbility"
  • 執(zhí)?MainAbility的 onStart ?法

    MainAbility是?個顯示界?的容器,在onStart?法中通過調(diào)? setMainRoute ?法來指 定當(dāng)前界?容器中顯示的視圖界?

    // ability相當(dāng)于一個容器(或者說是瀏覽器窗口),
    // 在容器里面通過填充一個視圖slice(html中的body)來展示。
    // MainAbilitySlice就是?個界?
    super.setMainRoute(MainAbilitySlice.class.getName());
  • 執(zhí)?MainAbilitySlice中的?onStart?完成界?的渲染

    slice是?個界?,界?中顯示什么視圖,就是通過onstart?法來加載渲染的

    手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

    手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

3.5.3 你好,世界哪里來的

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

$string : 表示引用的一sing,表示要去string文件中尋找鍵值對,如圖尋找key為:mainability_HelloWorld 的值。

四、Ability框架

4.1 Ability介紹

Ability是應(yīng)?所具備能?的抽象,也是應(yīng)?程序的重要組成部分。?個應(yīng)?可以具備多種能?

(即可以包含多個Ability),HarmonyOS?持應(yīng)?以Ability為單位進?部署。

Ability可以分為?FA(Feature Ability)?和PA (Particle Ability)?兩種類型,每種類型為

開發(fā)者提供了不同的模板,以便實現(xiàn)不同的業(yè)務(wù)功能。

  • FA?持Page Ability:

    Page模板是FA唯??持的模板,?于提供與?戶交互的能?。?個Page實例可以包含?

    組相關(guān)??,每個????個AbilitySlice實例表示。

    ??

    手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

  • PA?持Service Ability和Data Ability:

    • Service模板:?于提供后臺運?任務(wù)的能?。
    • Data模板:?于對外部提供統(tǒng)?的數(shù)據(jù)訪問抽象。

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

4.2 PageAbility

4.2.1PageAbility簡介

?個PageAbility相當(dāng)于?個??的容器(瀏覽器窗?),?個AbilitySlice相當(dāng)于顯示在容器

中的?個??(HTML)

Page模板(以下簡稱“Page”)是FA唯??持的模板,?于提供與?戶交互的能?。?個Page可以由?個或多個AbilitySlice構(gòu)成,AbilitySlice是指應(yīng)?的單個??及其控制邏輯的總和(相當(dāng)于?個HTML?件)。在?個Abiliy種可以包含多個Slice

商品管理: 	ProductAbility(PageAbility):
 goods-list.html	ProductListSlice
 goods-detail.html 	ProductDetailSlice

4.2.2 創(chuàng)建AbilitySlice

  • AbilitySlice創(chuàng)建slice包中

  • 創(chuàng)建步驟:

    • 創(chuàng)建?個類繼承 ohos.aafwk.ability.AbilitySlice 類

      public class MainAbilitySlice2 extends AbilitySlice {
      
      }
    • 在?resources/base/layout??錄下創(chuàng)建布局?件

      <?xml version="1.0" encoding="utf-8"?>
      <DirectionalLayout
       xmlns:ohos="http://schemas.huawei.com/res/ohos"
       ohos:height="match_parent"
       ohos:width="match_parent"
       ohos:orientation="vertical">
       <Text
       ohos:height="match_content"
       ohos:width="match_content"
       ohos:text="這是測試?本"
       ohos:text_color="#ff0000"
       ohos:text_size="40vp"></Text>
      </DirectionalLayout> 
    • 在創(chuàng)建的 AbilitySlice 類中重寫 onStart ?法,調(diào)?setUIContent?法加載布局?件

      通過 ResourceTable 加載resouces?錄下的資源

      public class MainAbilitySlice2 extends AbilitySlice {
          @Override
          protected void onStart(Intent intent) {
              super.onStart(intent);
       		//定義slice視圖組件(Java,XML)
       		//setUIContent(int); 加載應(yīng)?的 布局?件(xml) 作為當(dāng)前slice的視圖
       		setUIContent(ResourceTable.Layout_ability_main_slice2);
      	}
      }

4.2.3 PageAbility?命周期

?個Page中可以包含多個Slice,但是只能同時顯示?個slice,如何設(shè)置PageAbility默認

顯示的slice?

在?個Page Ability中提供了多個聲明周期?法,這些?法在當(dāng)前PageAbility加載的不同

階段會?定調(diào)?

說明

INACTIVE狀態(tài)是一種短暫存在的狀態(tài),可理解為“激活中”。

public class MainAbility extends Ability {
     /**
      * 當(dāng)系統(tǒng)?次創(chuàng)建當(dāng)前PageAbility實例時,?動調(diào)?onstart?法。也就是說對于?個Page??,onStart?法只會執(zhí)??次
      */
     public void onStart(Intent intent) {
     	super.onStart(intent);
     	super.setMainRoute(MainAbilitySlice2.class.getName());
     	System.out.println("--------------onStart");
     }
    
     /**
      * 當(dāng)前Page進?active狀態(tài)進?到?機前臺獲取焦點時,會觸發(fā)onActive?法的執(zhí)?
      */
     protected void onActive() {
     	super.onActive();
     	System.out.println("--------------onActive");
 	}
    
     /**
      * 當(dāng)前PageAbility失去焦點(??切?到后臺、切換到其他Page),觸發(fā)onInactive?法的執(zhí)?
      */
     protected void onInactive() {
     	super.onInactive();
     	System.out.println("--------------onInactive");
     }
    
     /**
      * 當(dāng)前PageAbility切換到后臺,不可?時,觸發(fā)onBackground執(zhí)?
      */
     protected void onBackground() {
     	super.onBackground();
     	System.out.println("--------------onBackground");
     }
     /**
      * 當(dāng)PageAbility從后臺不可?狀態(tài)(??在后臺、但是沒銷毀)切換到前臺可?狀態(tài)時觸發(fā) onForeground執(zhí)?
      */
     protected void onForeground(Intent intent) {
     	super.onForeground(intent);
     	System.out.println("--------------onForeground");
     }
     /**
      * 當(dāng)前Page銷毀時,觸發(fā)onStop的執(zhí)?
      */
     protected void onStop() {
     	super.onStop();
     	System.out.println("--------------onStop");
     }
}

4.2.4 Slice的兩種渲染方式

Slice相當(dāng)于一個網(wǎng)頁,Slice中顯示的視圖是通過組件來聲明的,Slice中的組件加載支持兩種方式:

  • Java代碼
  • xml布局文件

onStart方法:在Slice實例創(chuàng)建時執(zhí)行,用于載入當(dāng)前Slice的視圖組件,在onStart方法中通過調(diào)用setUIContext來加載視圖組件

setUIContext方法提供了2個重載:

setUIContext(int):通過布局?件的ID,加載resources/base/layout?錄下的布局?件

完成??的渲染

setUIContext(ComponentContainer) :通過加載?個使?Java代碼創(chuàng)建的組件完成??

的渲染

XML****?式渲染

  • 創(chuàng)建布局?件:ability_main_slice2.xml

    <?xml version="1.0" encoding="utf-8"?>
    <DirectionalLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:height="match_parent"
        ohos:width="match_parent"
        ohos:orientation="vertical">
    
        <Text
            ohos:height="match_content"
            ohos:width="match_content"
            ohos:text="這是測試文本"
            ohos:text_color="#ff0000"
            ohos:text_size="40vp"></Text>
    
    </DirectionalLayout>
  • 在Slice的onStart?法中加載布局?件:

    每創(chuàng)建一個布局文件(或者說每個資源都會創(chuàng)建一個ID)都會生成一個ID,所以布局文件調(diào)用的是setUIContext(int)方法

    手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        // 定義slice視圖組件(java,xml)
        // setUIContent(int); 加載應(yīng)用的 布局文件(xml)作為當(dāng)前slice的試圖
        super.setUIContent(ResourceTable.Layout_ability_main_slice2);
    }

Java?式渲染

  • 使?Java代碼創(chuàng)建組件,渲染到slice中

    public class MainAbilitySlice2 extends AbilitySlice {
    
        @Override
        protected void onStart(Intent intent) {
            super.onStart(intent);
            // 定義slice視圖組件(java,xml)
            // setUIContent(int); 加載應(yīng)用的 布局文件(xml)作為當(dāng)前slice的試圖
    //        super.setUIContent(ResourceTable.Layout_ability_main_slice2);
    
            // ComponentContainer(組件容器)
            DirectionalLayout directionalLayout = new DirectionalLayout(this);
            directionalLayout.setOrientation(Component.DRAG_VERTICAL);
            // Component(組件)
            Text text = new Text(this);
            text.setText("Hello Boys");
            text.setHeight(40);
            text.setTextSize(40);
            // 將組件放到組件容器中
            directionalLayout.addComponent(text);
            // 將組件容器渲染到slice中
            setUIContent(directionalLayout);
        }
    }

4.2.5 AbilitySlice間導(dǎo)航

?個PageAbility可以包含多個Slice,同?時刻只能顯示?個Slice,但是可以在不同的

Slice之間進?跳轉(zhuǎn)——AbilitySlice間的導(dǎo)航

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

  • 在MainAbilitySlice中添加按鈕,并監(jiān)聽按鈕的點擊事件(略 參考4.3)

  • 創(chuàng)建SecondAbilitySlice(略)

    <?xml version="1.0" encoding="utf-8"?>
    <DirectionalLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:height="match_parent"
        ohos:width="match_parent"
        ohos:orientation="vertical">
    
        <!-- 將圖片文件存到resource/base/media目錄 PS:文件的名字不要用數(shù)字開頭,因為名字會作為變量名 -->
        <Image
            ohos:height="match_content"
            ohos:width="match_parent"
            ohos:image_src="$media:cat">
        </Image>
    
    </DirectionalLayout>
    public class SecondAbilitySlice extends AbilitySlice {
    
        @Override
        protected void onStart(Intent intent) {
            super.onStart(intent);
            this.setUIContent(ResourceTable.Layout_ability_second);
        }
    }
  • 在MainAbilitySlice中監(jiān)聽按鈕的點擊事件,導(dǎo)航到SecondAbilitySlice

    public class MainAbilitySlice extends AbilitySlice {
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            // 在當(dāng)前slice中渲染試圖組件有2中方式:
            // 1. 基于Java代碼的渲染
            // 2. 基于xml標簽渲染,例如: super.setUIContent(ResourceTable.Layout_ability_main);
            super.setUIContent(ResourceTable.Layout_ability_main);
    
            // 1. 獲取id=btn1的按鈕組件
            Button btn1 = (Button) this.findComponentById(ResourceTable.Id_btn1);
    
            // 2.設(shè)置按鈕事件監(jiān)聽
            MainAbilitySlice _this = this;
            // a.創(chuàng)建事件監(jiān)聽器
            Component.ClickedListener clickedListener = new Component.ClickedListener() {
                @Override
                public void onClick(Component component) {
                    //挑轉(zhuǎn)到SecondAbilitySlice
                    // 從this指代的當(dāng)前slice跳轉(zhuǎn)到new的slice中
                    _this.present(new SecondAbilitySlice(), new Intent());
                }
            };
            // b.設(shè)置組件的事件監(jiān)聽
            btn1.setClickedListener(clickedListener);
    
        }
    
    }

    簡化版本

    public class MainAbilitySlice extends AbilitySlice {
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            // 在當(dāng)前slice中渲染試圖組件有2中方式:
            // 1. 基于Java代碼的渲染
            // 2. 基于xml標簽渲染,例如: super.setUIContent(ResourceTable.Layout_ability_main);
            super.setUIContent(ResourceTable.Layout_ability_main);
    
            // 1. 獲取id=btn1的按鈕組件
            Button btn1 = (Button) this.findComponentById(ResourceTable.Id_btn1);
            
    //        //b.設(shè)置組件的事件監(jiān)聽 PS:簡化成lambda表達示
            // PS:簡化成lambda表達式 因為listener要實現(xiàn)onclick方法
    //        btn1.setClickedListener(clickedListener->{
    //            present(new SecondAbilitySlice(), new Intent() );
    //        });
            
            // b.設(shè)置組件的事件監(jiān)聽  因為只有一個方法,可以省略大括號
            btn1.setClickedListener(clickedListener -> present(new SecondAbilitySlice(), new Intent()));
    
        }
    
    }

4.2.6 Slice之間的傳值問題

使?Intent對象實現(xiàn)slice間的傳值

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

  • MainAbilitySlice

    public class MainAbilitySlice extends AbilitySlice {
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            super.setUIContent(ResourceTable.Layout_ability_main);
            // 1. 獲取id=btn1的按鈕組件
            Button btn1 = (Button) this.findComponentById(ResourceTable.Id_btn1);
            // b.設(shè)置組件的事件監(jiān)聽 
            btn1.setClickedListener(clickedListener -> {
                // 在跳轉(zhuǎn)之前的slice將需要傳遞的數(shù)據(jù)設(shè)置到Intent對象中
                Intent intent1 = new Intent();
                intent1.setParam("productId", "101");
                present(new SecondAbilitySlice(), intent1);
            });
    
        }
    }
  • SecondAbilitySlice

    public class SecondAbilitySlice extends AbilitySlice {
    
        @Override
        protected void onStart(Intent intent) {
            super.onStart(intent);
            this.setUIContent(ResourceTable.Layout_ability_second);
            // 在跳轉(zhuǎn)后的slice的onStart方法中,從intent對象中獲取數(shù)據(jù)
            if (intent != null) {
                // 因為intent.getParam()返回的是IntentParams, 所以先獲取IntentParams然后再獲取值
                IntentParams params = intent.getParams();
                String productId = (String) params.getParam("productId");
                // 獲取到id=text1的文本組件
                Text text = (Text) findComponentById(ResourceTable.Id_text1);
                // 將獲取到的商品ID設(shè)置到text文本組件
                text.setText(productId);
            }
        }
    }

4.3 組件的事件監(jiān)聽

4.3.1 在MainAbilitySlice布局文件添加按鈕

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:orientation="vertical">

    <Image
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:image_src="$media:icon">
    </Image>

    <Text
        ohos:id="$+id:text_helloworld"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:background_element="$graphic:background_ability_main"
        ohos:layout_alignment="horizontal_center"
        ohos:text="$string:mainability_HelloWorld"
        ohos:text_size="40vp"/>
    <Button
        ohos:id="$+id:btn1"
        ohos:height="match_content"
        ohos:width="match_parent"
        ohos:padding="5vp"
        ohos:text="點我試試!"
        ohos:text_size="40vp"
        ohos:background_element="#a0b0c0"></Button>

</DirectionalLayout>

當(dāng)我們在Button使用$+id:btn1時,這個組件就會在ResourceTable中產(chǎn)生一個唯一標識

手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用

4.3.2 監(jiān)聽按鈕的點擊事件

  • 在加載布局文件的Slice類中,獲取按鈕組件,設(shè)置點擊事件的監(jiān)聽器

    package com.example.myapplicationdemo01.slice;
    
    import com.example.myapplicationdemo01.ResourceTable;
    import ohos.aafwk.ability.AbilitySlice;
    import ohos.aafwk.content.Intent;
    import ohos.agp.components.Button;
    import ohos.agp.components.Component;
    
    public class MainAbilitySlice extends AbilitySlice {
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            // 在當(dāng)前slice中渲染試圖組件有2中方式:
            // 1. 基于Java代碼的渲染
            // 2. 基于xml標簽渲染,例如: super.setUIContent(ResourceTable.Layout_ability_main);
            super.setUIContent(ResourceTable.Layout_ability_main);
    
            // 1. 獲取id=btn1的按鈕組件
            Button btn = (Button) this.findComponentById(ResourceTable.Id_btn1);
    
            // 2.設(shè)置按鈕事件監(jiān)聽
            // a.創(chuàng)建事件監(jiān)聽器
            Component.ClickedListener clickedListener = new Component.ClickedListener(){
                @Override
                public void onClick(Component component) {
                    System.out.println("--------觸發(fā)了點擊事件");
                }
            };
            // b.設(shè)置組件的事件監(jiān)聽
            btn.setClickedListener(clickedListener);
        }
    }
    
  • 可以使用同一個監(jiān)聽器監(jiān)聽多個組件的事件,如果點擊不同的組件執(zhí)行的業(yè)務(wù)不同,則可以通過組件判斷來執(zhí)行不同的業(yè)務(wù)文章來源地址http://www.zghlxwxcb.cn/news/detail-431218.html

    // 1. 獲取id=btn1的按鈕組件
    Button btn1 = (Button) this.findComponentById(ResourceTable.Id_btn1);
    Button btn2 = (Button) this.findComponentById(ResourceTable.Id_btn2);
    
    // 2.設(shè)置按鈕事件監(jiān)聽
    // a.創(chuàng)建事件監(jiān)聽器
    Component.ClickedListener clickedListener = new Component.ClickedListener(){
        @Override
        public void onClick(Component component) {
            // Component參數(shù) 表示監(jiān)聽的組件
            if (component ==  btn1) {
                System.out.println("--------aaa");
            } else if (component == btn2) {
                System.out.println("~~~~~~~~bbb");
            }
    
        }
    };
    // b.設(shè)置組件的事件監(jiān)聽
    btn1.setClickedListener(clickedListener);// 輸出aaa
    btn2.setClickedListener(clickedListener);// 輸出bbb

到了這里,關(guān)于手把手教你開發(fā)第一個HarmonyOS (鴻蒙)移動應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【手把手教你制作一個簡易版的shell】

    【手把手教你制作一個簡易版的shell】

    為了簡便,命令行中的提示符我們可以直接用printf打印,而具體執(zhí)行命令可以交給子進程去做,現(xiàn)在的關(guān)鍵是如何將獲得的命令行中的命令切割。我們在學(xué)習(xí)C語言時提到了strtok函數(shù),正好這個函數(shù)可以用來作為切割。 基本框架: 不知道大家注意到了沒有,我們從鍵盤中讀取

    2023年04月16日
    瀏覽(39)
  • 手把手教你做一個多路灰度傳感器

    手把手教你做一個多路灰度傳感器

    市面上有的灰度傳感器對于一些人來說可能不合適 ?于是呢不少人想自己做,比如我,當(dāng)時也是走了一些彎路的,現(xiàn)在把自己的經(jīng)驗寫上來,各位動手能力強的自己拿去用 原理: 左邊發(fā)射紅外光,地面反射到光敏三極管,改變A_OUTx處的電壓值,不同顏色和材質(zhì)對反射回來的

    2024年02月15日
    瀏覽(87)
  • 手把手教你搭建一個Minecraft 服務(wù)器

    手把手教你搭建一個Minecraft 服務(wù)器

    這次,我們教大家如何搭建一個我的世界服務(wù)器 首先,我們來到這個網(wǎng)站 MCVersions.net - Minecraft Versions Download List MCVersions.net offers an archive of Minecraft Client and Server jars to download, for both current and old releases! https://mcversions.net/ ? 在這里,我們點擊對應(yīng)的版本,從左到右依次是穩(wěn)定版

    2024年02月09日
    瀏覽(33)
  • 手把手教你實現(xiàn)一個循環(huán)隊列(C語言)

    手把手教你實現(xiàn)一個循環(huán)隊列(C語言)

    這是一道leetcode關(guān)于隊列的經(jīng)典題: 622.?設(shè)計循環(huán)隊列 https://leetcode.cn/problems/design-circular-queue/ ?大家注意這個題目要求,這個隊列是定長的,如果滿了則不能再添加數(shù)據(jù)。那么我們設(shè)計一個隊頭front和隊尾rear,每次添加數(shù)據(jù)rear向后走,這時就有一個問題, 怎么區(qū)分空和滿呢

    2024年02月04日
    瀏覽(23)
  • 手把手教你寫出第一個C語言程序

    手把手教你寫出第一個C語言程序

    大家好,我是努力學(xué)習(xí)游泳的魚。這篇文章將手把手帶你寫出人生中第一個C語言程序, Hello, World 。在閱讀本文之前,建議先百度 visual studio ,在微軟官網(wǎng)下載并安裝VS的最新版本,安裝時記得勾選“C++桌面開發(fā)”選項。 2.1 環(huán)境 工欲善其事必先利其器,我們需要寫C語言代碼

    2024年02月10日
    瀏覽(23)
  • 手把手教你新建一個winform項目(史上最全)

    手把手教你新建一個winform項目(史上最全)

    最近有粉絲訂閱了我的博客專欄《winform控件從入門到精通》,但是卻來問我平時使用什么軟件來開發(fā)winform程序,我本以為訂閱我專欄的粉絲至少應(yīng)該是掌握Microsoft Visual Studio的基本用法,也能夠創(chuàng)建winform項目,看來是我大意了,我的錯,粉絲們!對于不會創(chuàng)建winform項目但是

    2024年02月04日
    瀏覽(72)
  • 手把手教你在ARM板上寫一個驅(qū)動程序!

    手把手教你在ARM板上寫一個驅(qū)動程序!

    摘要:搞嵌入式有兩個方向,一個是嵌入式軟件開發(fā)(MCU方向),另一個是嵌入式軟件開發(fā)(Linux方向)。其中MCU方向基本是裸機開發(fā)和RTOS開發(fā)。而Linux開發(fā)方向又分為驅(qū)動開發(fā)和應(yīng)用開發(fā)。其中應(yīng)用開發(fā)相比于驅(qū)動開發(fā)來說簡單一些,因為搞驅(qū)動你要和Linux內(nèi)核打交道。而我們普

    2024年02月01日
    瀏覽(32)
  • 用Python手把手教你實現(xiàn)一個爬蟲(含前端界面)

    用Python手把手教你實現(xiàn)一個爬蟲(含前端界面)

    前言 爬蟲基本原理 使用Python的requests庫發(fā)送HTTP請求 使用BeautifulSoup庫解析HTML頁面 使用PyQt5構(gòu)建前端界面 實現(xiàn)一個完整的爬蟲程序 結(jié)語 隨著互聯(lián)網(wǎng)的飛速發(fā)展,再加上科技圈的技術(shù)翻天覆地的革新,互聯(lián)網(wǎng)上每天都會產(chǎn)生海量的數(shù)據(jù),這些數(shù)據(jù)對于企業(yè)和個人都具有重要的

    2024年04月28日
    瀏覽(28)
  • 動手實踐丨手把手教你用STM32做一個智能魚缸

    動手實踐丨手把手教你用STM32做一個智能魚缸

    摘要: 本文基于STM32單片機設(shè)計了一款基于物聯(lián)網(wǎng)的智能魚缸。 本文分享自華為云社區(qū)《基于STM32+華為云IOT設(shè)計的物聯(lián)網(wǎng)魚缸【玩轉(zhuǎn)華為云】》,作者: DS小龍哥 。 為了緩解學(xué)習(xí)、生活、工作帶來的壓力,提升生活品質(zhì),許多人喜歡在家中、辦公室等場所養(yǎng)魚。為節(jié)省魚友

    2024年01月16日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包