<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

harmonyos開發者聯盟

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-06 15:27 ? 次閱讀

介紹

本篇Codelab是基于Flex容器組件,實現彈性布局效果。彈性布局的特點是頁面元素的寬度按照屏幕分辨率進行適配調整,但整體布局不變。

相關概念

  • [Flex組件]:以彈性方式布局子組件的容器組件。
  • [Search組件]:搜索框組件,適用于瀏覽器的搜索內容輸入框等應用場景。
  • [Text組件]:顯示一段文本的組件。
  • [Image組件]:圖片組件,支持本地圖片和網絡圖片的渲染展示。
  • [Scroll組件]:可滑動的容器組件,當子組件的布局尺寸超過父組件的視口時,內容可以滑動。
  • [條件渲染]:條件渲染可根據應用的不同狀態,使用if、else和else if渲染對應狀態下的UI內容。
  • [循環渲染]:基于數組類型數據執行循環渲染。

環境搭建

軟件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 開發板類型:[潤和RK3568開發板]。
  • OpenHarmony系統:3.2 Release。

環境搭建

完成本篇Codelab我們首先要完成開發環境的搭建,本示例以RK3568開發板為例,參照以下步驟進行:

  1. [獲取OpenHarmony系統版本]:標準系統解決方案(二進制)。以3.2 Release版本為例:
  2. 搭建燒錄環境。
    1. [完成DevEco Device Tool的安裝]
    2. [完成RK3568開發板的燒錄]
  3. 搭建開發環境。
    1. 開始前請參考[工具準備],完成DevEco Studio的安裝和開發環境配置。
    2. 開發環境配置完成后,請參考[使用工程向導]創建工程(模板選擇“Empty Ability”)。
    3. 工程創建完成后,選擇使用[真機進行調測]。
    4. 鴻蒙開發指導文檔:[qr23.cn/FBD4cY]

代碼結構解讀

本篇Codelab只對核心代碼進行講解,對于完整代碼,我們會在gitee中提供。

├──entry/src/main/ets	           // 代碼區
│  ├──common
│  │  └──constants
│  │     └──StyleConstants.ets     // 樣式常量類 
│  ├──entryability
│  │  └──EntryAbility.ts           // 程序入口類
│  ├──pages
│  │  └──HomePage.ets              // 主界面	
│  ├──view
│  │  ├──ClearSearch.ets           // 清除歷史記錄自定義組件
│  │  ├──FlexLayout.ets            // 彈性布局自定義組件
│  │  └──SearchInput.ets           // 搜索輸入框自定義組件
│  └──viewmodel
│     └──SearchViewModel.ets       // 歷史搜索數據類
└──entry/src/main/resources        // 資源文件目錄

`HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789v直接拿`

搜狗高速瀏覽器截圖20240326151450.png

編寫搜索框布局

在這個章節中,我們需要完成搜索框布局的編寫,并實現文本輸入和點擊事件。效果如圖所示:

在ets目錄下,點擊鼠標右鍵 > New > Directory,新建名為view的自定義子組件目錄。然后在view目錄下,點擊鼠標右鍵 > New > ArkTS File,新建名為SearchInput的ArkTS文件。最后在SearchInput.ets文件中,逐步完成如下操作:

  1. 使用@Component新增一個自定義組件,組件名為SearchInput。
  2. 在build()中使用Flex作為容器組件,實現子組件水平排列。
  3. 使用Search組件作為搜索框布局,Text組件作為搜索文本按鈕布局。
// SearchInput.ets
@Component
export default struct SearchInput {
  build() {
    Flex({ alignItems: ItemAlign.Center }) {
      // 搜索框布局
      Search()
        ...
	
      // 搜索文本按鈕布局
      Text($r('app.string.search'))
        ...
    }
    ...
  }
}

接下來我們實現Search組件的樣式及輸入功能,并將輸入的數據添加到數組searchArr中:

  1. 使用@State定義變量searchInput,存儲搜索框輸入的文本內容。
  2. 在Search組件參數中,將變量searchInput賦值給參數value,參數placeholder填寫提示內容,參數icon表示搜索圖標路徑。
  3. 設置高度height、寬度width、背景顏色backgroundColor、提示內容顏色placeholderColor等屬性。
  4. 設置onChange事件,將用戶輸入的內容綁定到變量searchInput中。
  5. 使用@Link定義一個數組變量searchArr,點擊搜索文本按鈕時,將用戶輸入的內容即searchInput的值,通過數組的unshift()方法,在數組searchArr的頭部添加數據。
// SearchInput.ets
@Component
export default struct SearchInput {
  @State searchInput: string = '';
  @Link searchArr: Array< string >;

  build() {
    Flex({ alignItems: ItemAlign.Center }) {
      // 搜索框布局
      Search({
        value: this.searchInput,
        placeholder: StyleConstants.SEARCH_PLACEHOLDER,
        icon: StyleConstants.SEARCH_ICON
      })
        .placeholderColor($r('app.color.placeholder_color'))
        .placeholderFont({ size: $r('app.float.font_size') })
        .textFont({ size: $r('app.float.font_size') })
        .height(StyleConstants.SEARCH_HEIGHT)
        .width(StyleConstants.SEARCH_WIDTH)
        .backgroundColor(Color.White)
        ...
        .onChange((value: string) = > {
          this.searchInput = value;
        })

      // 搜索文本按鈕布局
      Text($r('app.string.search'))
        ...
        .onClick(() = > {
          if (this.searchInput !== '' && this.searchInput.trim().length > 0) {
            // 使用unshift在數組頭部添加數據
            this.searchArr.unshift(this.searchInput.trim());
          }
          this.searchInput = '';
        })
    }
    ...
  }
}

然后我們在HomePage.ets首頁中,引入SearchInput搜索輸入框自定義組件。

  1. 使用@State定義數組變量searchArr,存放最近搜索文本內容。
  2. 在構造參數中,使用$符號引用@State修飾的變量searchArr,將父組件的變量searchArr與子組件searchArr變量關聯起來。
// HomePage.ets
import SearchInput from '../view/SearchInput';

@Entry
@Component
struct HomePage {
  @State searchArr: Array< string > = SearchViewModel.getSearchArrData();

  build() {
    Column() {
      // 搜索輸入框自定義組件
      SearchInput({ searchArr: $searchArr })
    }
    ...
  }
}

編寫清除記錄布局

在這個章節中,我們需要完成清除記錄布局的編寫,并實現條件渲染。效果如圖所示:

在view目錄下,點擊鼠標右鍵 > New > ArkTS File,新建名為ClearSearch的ArkTS文件。然后在ClearSearch.ets文件中,逐步完成如下操作:

  1. 使用@Component新增一個自定義組件,組件名為ClearSearch。
  2. 在build()中使用Flex作為容器組件,實現子組件水平排列。
  3. 使用if/else實現條件渲染:當有搜索內容時,顯示最近搜索的文本和清除搜索內容圖標;否則就顯示沒有搜索內容和相關圖片。
  4. 使用@Link定義數組變量searchArr,當點擊清除搜索內容圖標時,所有最近搜索內容清空。
// ClearSearch.ets
@Component
export default struct ClearSearch {
  // 搜索內容數組
  @Link searchArr: Array< string >;

  build() {
    Flex({ alignItems: ItemAlign.Center }) {
      if (this.searchArr.length > 0) {
        Text($r('app.string.recent_searches'))
          ...

        Image($r('app.media.ic_delete'))
          ...
          .onClick(() = > {
            this.searchArr.splice(0, this.searchArr.length);
            this.searchArr.length = 0;
          })
      } else {
        Column() {
          Image($r('app.media.ic_no_search'))
            ...

          Text($r('app.string.no_search_content'))
            ...
        }
        ...
      }
    }
  }
}

然后我們在HomePage.ets首頁中,引入ClearSearch搜索輸入框自定義組件。

// HomePage.ets
import SearchInput from '../view/SearchInput';
import ClearSearch from '../view/ClearSearch';

@Entry
@Component
struct HomePage {
  @State searchArr: Array< string > = SearchViewModel.getSearchArrData();

  build() {
    Column() {
      // 搜索輸入框自定義組件
      SearchInput({ searchArr: $searchArr })
      // 清除搜索記錄自定義組件
      ClearSearch({ searchArr: $searchArr })
    }
    ...
  }
}

編寫彈性布局

在這個章節中,我們需要完成彈性布局的功能樣式,并實現循環渲染。效果如圖所示:

在view目錄下,點擊鼠標右鍵 > New > ArkTS File,新建名為FlexLayout的ArkTS文件。然后在FlexLayout.ets文件中,逐步完成如下操作:

  1. 使用@Component新增一個自定義組件,組件名為FlexLayout。
  2. 在build()中使用Flex作為容器,設置參數wrap為FlexWrap.Wrap時為彈性布局,實現自動換行。
  3. 使用if實現條件渲染,當有搜索內容時,顯示最近搜索的所有內容。
  4. 使用@Link定義數組變量searchArr,表示子組件要顯示的所有最近搜索文本內容。
  5. 使用ForEach遍歷變量searchArr,實現循環渲染。
// FlexLayout.ets
@Component
export default struct FlexLayout {
  @Link searchArr: Array< string >;

  build() {
    Scroll() {
      // Flex布局, wrap設置成FlexWrap.Wrap時為彈性布局
      Flex({ justifyContent: FlexAlign.Start, wrap: FlexWrap.Wrap }) {
        if (this.searchArr.length > 0) {
          // 循環渲染		
          ForEach(this.searchArr, (item: string) = > {
            Text(`${item}`)
              ...
          }, (item: string) = > JSON.stringify(item))
        }
      }
      ...
    }
  }
}

然后我們在HomePage.ets首頁中,引入FlexLayout搜索輸入框自定義組件。

// HomePage.ets
import SearchInput from '../view/SearchInput';
import ClearSearch from '../view/ClearSearch';
import FlexLayout from '../view/FlexLayout';

@Entry
@Component
struct HomePage {
  @State searchArr: Array< string > = SearchViewModel.getSearchArrData();

  build() {
    Column() {
      // 搜索輸入框自定義組件
      SearchInput({ searchArr: $searchArr })
      // 清除搜索記錄自定義組件
      ClearSearch({ searchArr: $searchArr })
      // 彈性布局自定義組件
      FlexLayout({ searchArr: $searchArr })
    }
    ...
  }
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 開發板
    +關注

    關注

    25

    文章

    4504

    瀏覽量

    94454
  • 開發者
    +關注

    關注

    1

    文章

    507

    瀏覽量

    16502
  • 鴻蒙
    +關注

    關注

    55

    文章

    1763

    瀏覽量

    42153
  • HarmonyOS
    +關注

    關注

    79

    文章

    1875

    瀏覽量

    29333
  • OpenHarmony
    +關注

    關注

    23

    文章

    3375

    瀏覽量

    15194
收藏 人收藏

    評論

    相關推薦

    【直播預告】首批官方鴻蒙系統課程開發者,教你從零開發HarmonyOS智能硬件

    `直播報名地址:http://www.qd573.com/activity/harmonyoslive/簡介在華為開發者大會2020議題中關注度最高的無疑是HarmonyOS的最新進展
    發表于 09-11 11:21

    線下 | HarmonyOS 2.0 手機開發者 Beta 活動

    /consumer/cn/activity/101608287564994799歡迎在鏈接中點擊 “我要報名”按鈕,注冊成為華為開發者聯盟會員后免費報名。報名成功后,我們將以官方郵件和短信的形式通知您報名結果。歡迎關注HarmonyOS
    發表于 12-21 10:11

    HarmonyOS 2.0手機開發者Beta公測招募【線上】

    、若在試用過程中發現問題,該如何反饋給HarmonyOS團隊?若發現HarmonyOS 2.0手機開發者Beta版本的任何問題,請登錄華為開發者聯盟
    發表于 01-12 15:57

    HDD | HarmonyOS開發者日 上海站

    ``【活動簡介】4月17日,HarmonyOS開發者日將在上海與廣大開發者見面。本次活動設主論壇、新技術論壇、專家面對面交流會、及全天的Codelab和8大場景體驗展區。這是一場技術硬核、有趣好玩
    發表于 04-01 15:55

    4月17日 HDD | HarmonyOS開發者日 上海站

    【活動簡介】4月17日,HarmonyOS開發者日將在上海與廣大開發者見面。本次活動設主論壇、新技術論壇、專家面對面交流會、及全天的Codelab和8大場景體驗展區。這是一場技術硬核、有趣好玩
    發表于 04-02 11:24

    關于 6.26 杭州 HarmonyOS 開發者日活動延期公告

    尊敬的合作伙伴/開發者朋友們:由于疫情原因,原定于在杭州舉辦的6月26日「HarmonyOS開發者日活動」將延期至7月底舉辦,屆時變更后的時間和地點將以郵件或短信的形式再次通知。由此給您造成的不便
    發表于 06-22 14:51

    HarmonyOS開發者

    HarmonyOS開發者,HarmonyOS設備開發學習路線HarmonyOS 2.0如約而至,內存在128KB~128MB的終端設備廠商有
    發表于 07-22 09:53

    絕對干貨!HarmonyOS開發者日資料全公開,鴻蒙開發者都在看

    731HarmonyOS開發者日大會PPT資料全在這了,想要了解的小伙伴可以自行下載啦~下載資料的小伙伴還可以在評論區回復領取5個積分哦1、HarmonyOS 職業認證解讀:該主題是開發者
    發表于 08-04 14:36

    HarmonyOS 3.0.0開發者預覽版全新發布

    2021年10月22日在華為開發者大會HDC.Together 2021 主題演講上,我們發布了HarmonyOS 3.0.0開發者預覽版,主要內容包括:Harmony設計系統、ArkUI 3.0
    發表于 10-25 15:49

    HarmonyOS 3.0.0開發者預覽版全新發布

    2021年10月22日在華為開發者大會HDC.Together 2021 主題演講上,我們發布了HarmonyOS 3.0.0開發者預覽版,主要內容包括:Harmony設計系統、ArkUI 3.0
    發表于 11-19 18:29

    華為鴻蒙HarmonyOS開發者資料合集

    HarmonyOS開發者資料下載內容包括以下十點:  1、DevEco Studio 1.0 使用指南  2、HarmonyOS-NFC開發指南  3、
    發表于 03-30 10:56

    請問海外開發者如何開發HarmonyOS應用?

    海外開發者如何開發HarmonyOS應用?
    發表于 06-02 15:50

    面向開發者HarmonyOS 3.0 Beta發布

    2021年10月,我們面向開發者發布了HarmonyOS 3.0 Developer Preview版,但開發的腳步永不停歇,現在我們又更新了API版本,配套發布了HarmonyOS
    發表于 07-08 11:14

    潤和軟件榮獲華為開發者聯盟 2022年度最佳生態服務商獎

    ,江蘇潤和軟件股份有限公司(以下簡稱“潤和軟件”)受邀參會,并在華為終端云開發者聯盟舉辦的“一站式開發者服務及開放能力”分論壇上榮獲“華為開發者聯盟
    發表于 11-09 10:24

    喜報|HarmonyOS開發者社區連獲業內獎項,持續深耕開發者生態

    臨近年末,各大平臺陸續揭曉年度榜單,表彰了具備強大影響力與做出突出貢獻的優秀項目與團隊,而HarmonyOS開發者社區作為技術分享,學習和展示的平臺,輸出高質量技術文章百余篇,連續獲得業內各大
    發表于 01-19 14:32
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>