精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

HarmonyOS開發案例:【使用List組件實現設置項】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-05-10 17:01 ? 次閱讀

介紹

將使用List組件、Toggle組件以及Router接口,實現一個簡單的設置頁,點擊將跳轉到對應的詳細設置頁面。效果圖如下:

相關概念

  • [@CustomDialog]:@CustomDialog裝飾器用于裝飾自定義彈窗。
  • [List]:List是常用的滾動類容器組件之一,它按照水平或者豎直方向線性排列子組件, List的子組件必須是ListItem,它的寬度默認充滿List的寬度。
  • [TimePicker]:TimePicker是選擇時間的滑動選擇器組件,默認以 00:00 至 23:59 的時間區創建滑動選擇器。
  • [Toggle]:組件提供勾選框樣式、狀態按鈕樣式及開關樣式。
  • [Router]:通過不同的url訪問不同的頁面,包括跳轉到應用內的指定頁面、用應用內的某個頁面替換當前頁面、返回上一頁面或指定的頁面等。

環境搭建

軟件要求

  • [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”),選擇JS或者eTS語言開發。
    3. 工程創建完成后,選擇使用[真機進行調測]。
    4. 鴻蒙開發指導文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

代碼結構解讀

本篇Codelab只對核心代碼進行講解,完整代碼可以直接從gitee獲取。

├──entry/src/main/ets                        // 代碼區
│  ├──common
│  │  ├──constants
│  │  │  └──CommonConstant.ets               // 常量集合文件
│  │  └──utils
│  │     ├──BroadCast.ets                    // 事件發布訂閱管理器
│  │     └──Log.ets                          // 日志打印
│  ├──entryability
│  │  └──EntryAbility.ts                     // 應用入口,承載應用的生命周期
│  ├──model
│  │  ├──EventSourceManager.ets              // 事件資源管理器
│  │  ├──TaskInfo.ets                        // 任務信息存放
│  │  └──TaskInitList.ets                    // 初始化數據
│  ├──pages
│  │  ├──ListIndexPage.ets                   // 頁面入口
│  │  └──TaskEditPage.ets                    // 編輯任務頁
│  ├──view
│  │  ├──CustomDialogView.ets                // 自定義彈窗統一入口
│  │  ├──TaskDetail.ets                      // 任務編輯詳情組件
│  │  ├──TaskEditListItem.ets                // 任務編輯詳情Item組件
│  │  ├──TaskList.ets                        // 任務列表組件
│  │  └──TaskSettingDialog.ets               // 彈窗組件
│  └──viewmodel
│     ├──FrequencySetting.ets                // 頻率范圍設置
│     └──TaskTargetSetting.ets               // 任務目標設置
└──entry/src/main/resources
   ├──base
   │  ├──element                             // 字符串以及顏色的資源文件
   │  ├──media                               // 圖片等資源文件
   │  └──profile                             // 頁面配置文件存放位置
   ├──en_US
   │  └──element
   │     └──string.json                      // 英文字符存放位置
   ├──rawfile                                // 大體積媒體資源存放位置
   └──zh_CN
       └──element
          └──string.json                     // 中文字符存放位置
          
`HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿`

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

任務列表頁

任務列表頁由上部分的標題、返回按鈕以及正中間的任務列表組成。

使用Navigation以及List組件構成元素,使用ForEach遍歷生成具體列表。這里是Navigation構成頁面導航:

// ListIndexPage.ets
Navigation() {
  Column() {

    // 頁面中間的列表
    TaskList() 
  }
  .width(THOUSANDTH_1000)
  .justifyContent(FlexAlign.Center)
}
.size({ width:THOUSANDTH_1000, height:THOUSANDTH_1000 })
.title(ADD_TASK_TITLE)

列表右側有一個判斷是否開啟的文字標識,點擊某個列表需要跳轉到對應的任務編輯頁里。具體的列表實現如下:

// TaskList.ets
List({ space:commonConst.LIST_ITEM_SPACE }) {
  ForEach(this.taskList, (item: TaskListItem) = > {
    ListItem() {
      Row() {
        Row() {
          Image(item?.icon)
          ...
          Text(item?.taskName)
          ...
        }
        .width(commonConst.THOUSANDTH_500)

        // 狀態顯示
        if (item?.isOpen) {
          Text($r('app.string.already_open'))
            ...
        }
        Image($r('app.media.right_grey'))
        ...
      }
        ...
    }
      ...
    // 路由跳轉到任務編輯頁
    .onClick(() = > {
      router.pushUrl({
        url: 'pages/TaskEditPage',
        params: {
          params: formatParams(item),
        }
      })
    })
    ...
  })
}

任務編輯頁

任務編輯頁由上方的“編輯任務”標題以及返回按鈕,主體內容的List配置項和下方的完成按鈕組成,實現效果如圖:

由于每一個配置項功能不相同,且邏輯復雜,故將其拆分為五個獨立的組件。

任務編輯頁面,由Navigation和一個自定義組件TaskDetail構成:

// TaskEditPage.ets
Navigation() {
  Column() {
    TaskDetail()
  }
  .width(THOUSANDTH_1000)
  .height(THOUSANDTH_1000)
}
.size({ width:THOUSANDTH_1000, height:THOUSANDTH_1000 })
.title(EDIT_TASK_TITLE)
.titleMode(NavigationTitleMode.Mini)

自定義組件由List以及其子組件ListItem構成:

// TaskDetail.ets
List({ space:commonConst.LIST_ITEM_SPACE }) {
  ListItem() {
    TaskChooseItem()
  }
  ...
  ListItem() {
    TargetSetItem()
  }
  ...
  ListItem() {
    OpenRemindItem()
  }
  ...
  ListItem() {
    RemindTimeItem()
  }
  ...
  ListItem() {
    FrequencyItem()
  }
  ...
}
.width(commonConst.THOUSANDTH_940)

列表的每一項做了禁用判斷,需要任務打開才可以點擊編輯:

// TaskDetail.ets
.enabled(this.settingParams?.isOpen)

一些特殊情況的禁用,如每日微笑、每日刷牙的目標設置不可編輯:

// TaskDetail.ets
.enabled(
  this.settingParams?.isOpen
  && (this.settingParams?.taskID !== taskType.smile)
  && (this.settingParams?.taskID !== taskType.brushTeeth)
)

提醒時間在開啟提醒打開之后才可以編輯:

// TaskDetail.ets
.enabled(this.settingParams?.isOpen && this.settingParams?.isAlarm)

設置完成之后,點擊完成按鈕,此處為了模擬效果,并不與數據庫產生交互,因此直接彈出提示“設置完成!!!”。

// TaskDetail.ets
finishTaskEdit() {
  prompt.showToast({
    message: commonConst.SETTING_FINISHED_MESSAGE
  })
}

任務編輯彈窗

彈窗由封裝的自定義組件CustomDialogView注冊事件,并在點擊對應的編輯項時觸發,從而打開彈窗:

CustomDialogView引入實例并注冊事件:

// CustomDialogView.ets
targetSettingDialog = new CustomDialogController({
  builder: TargetSettingDialog(),
  autoCancel: true,
  alignment: DialogAlignment.Bottom,
  offset: { dx:ZERO, dy:MINUS_20 }
})
...

// 注冊事件
this.broadCast.on(
  BroadCastType.SHOW_FREQUENCY_DIALOG,
  () = > {
    this.FrequencyDialogController.open();
  })

點擊對應的編輯項觸發:

// TaskDetail.ets
.onClick(() = > {
  if (this.broadCast !== undefined) {
    this.broadCast.emit(
      BroadCastType.SHOW_TARGET_SETTING_DIALOG);
  }
})

自定義彈窗的實現:

因為任務目標設置有三種類型:

  • 早睡早起的時間
  • 喝水的量度
  • 吃蘋果的個數

如下圖所示:

故根據任務的ID進行區分,將同一彈窗復用:

// TaskSettingDialog.ets
if ([taskType.getup, taskType.sleepEarly].indexOf(this.settingParams?.taskID) > commonConst.HAS_NO_INDEX) {
  TimePicker({
    selected:commonConst.DEFAULT_SELECTED_TIME
  })
  ...
} else {
  TextPicker({ range:this.settingParams?.taskID === taskType.drinkWater ? this.drinkRange : this.appleRange,
    value: this.settingParams.targetValue})
  ...
}

彈窗確認的時候將修改好的值賦予該項設置,如不符合規則,將彈出提示:

// TaskSettingDialog.ets
// 校驗規則
compareTime(startTime: string, endTime: string) {
  if (returnTimeStamp(this.currentTime) < returnTimeStamp(startTime) ||
    returnTimeStamp(this.currentTime) > returnTimeStamp(endTime)) {

    // 彈出提示
    prompt.showToast({
      message:commonConst.CHOOSE_TIME_OUT_RANGE
    })
    return false;
  }
  return true;
}

// 設置修改項
if (this.settingParams?.taskID === taskType.sleepEarly) {
  if (!this.compareTime(commonConst.SLEEP_EARLY_TIME, commonConst.SLEEP_LATE_TIME)) {
    return;
  }
  this.settingParams.targetValue = this.currentTime;
  return;
}
this.settingParams.targetValue = this.currentValue;

其余彈窗實現基本類似,這里不再贅述。

審核編輯 黃宇

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

    關注

    1

    文章

    505

    瀏覽量

    17805
  • HarmonyOS
    +關注

    關注

    79

    文章

    1967

    瀏覽量

    30025
  • OpenHarmony
    +關注

    關注

    25

    文章

    3661

    瀏覽量

    16159
收藏 人收藏

    評論

    相關推薦

    HarmonyOS開發案例:【 slider組件的使用】

    主要介紹slider滑動條組件的使用。如圖所示拖動對應滑動條調節風車的旋轉速度以及縮放比例。
    的頭像 發表于 04-25 22:02 ?885次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【 slider<b class='flag-5'>組件</b>的使用】

    HarmonyOS開發案例:【image、image-animator組件

    OpenHarmony提供了常用的圖片、圖片幀動畫播放器組件開發者可以根據實際場景和開發需求,實現不同的界面交互效果,包括:點擊陰影效果、點擊切換狀態、點擊動畫效果、點擊切換動效。
    的頭像 發表于 04-26 17:32 ?1408次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【image、image-animator<b class='flag-5'>組件</b>】

    HarmonyOS開發案例:【購物車app】

    OpenHarmony ArkUI框架提供了豐富的動畫組件和接口,開發者可以根據實際場景和開發需求,選用豐富的動畫組件和接口來實現不同的動畫
    的頭像 發表于 05-14 18:19 ?1002次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【購物車app】

    HarmonyOS開發案例:【使用List組件實現商品列表】

    OpenHarmony ArkTS提供了豐富的接口和組件開發者可以根據實際場景和開發需求,選用不同的組件和接口。
    的頭像 發表于 05-10 16:41 ?1268次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【使用<b class='flag-5'>List</b><b class='flag-5'>組件</b><b class='flag-5'>實現</b>商品列表】

    HarmonyOS開發案例:【Web組件實現抽獎】

    基于ArkTS的聲明式開發范式的樣例,主要介紹了Web組件如何加載本地和云端H5小程序。
    的頭像 發表于 05-09 18:31 ?1327次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【Web<b class='flag-5'>組件</b><b class='flag-5'>實現</b>抽獎】

    HarmonyOS開發案例:【基礎組件Slider的使用】

    學習如何使用聲明式UI編程框架的基礎組件。本篇Codelab將會使用Image組件、Slider組件、Text組件共同實現一個可調節的風車動
    的頭像 發表于 05-10 16:01 ?647次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【基礎<b class='flag-5'>組件</b>Slider的使用】

    HarmonyOS開發案例:【常用組件與布局】

    HarmonyOS ArkUI提供了豐富多樣的UI組件,您可以使用這些組件輕松地編寫出更加豐富、漂亮的界面。
    的頭像 發表于 05-09 18:20 ?1173次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【常用<b class='flag-5'>組件</b>與布局】

    鴻蒙開發實戰-(ArkUI)List組件和Grid組件的使用

    一系列相同寬度的列表項,連續、多行呈現同類數據,例如圖片和文本。常見的列表有線性列表(List列表)和網格布局(Grid列表): 為了幫助開發者構建包含列表的應用,ArkUI提供了List
    發表于 01-18 20:18

    HarmonyOS組件開發指南

    HarmonyOS軟件以組件(bundel)作為基本單元,從系統角度看,凡是運行在HarmonyOS上的軟件都可以定義為組件;一般來講,根據組件
    發表于 09-18 17:14

    HarmonyOS應用開發資料(Svg組件

    1、HarmonyOS應用開發-Svg組件circle  該組件從API version 7開始支持。后續版本如有新增內容,則采用上角標單獨標記該內容的起始版本。2、
    發表于 03-17 14:49

    組件資料】HarmonyOS三方件開發指南

    1、HarmonyOS三方件開發指南——LoadingView組件1.LoadingView組件功能介紹1.1.功能介紹:LoadingView組件
    發表于 03-21 11:18

    HarmonyOS/OpenHarmony應用開發-聲明式開發范式組件匯總

    組件是構建頁面的核心,每個組件通過對數據和方法的簡單封裝,實現獨立的可視、可交互功能單元。組件之間相互獨立,隨取隨用,也可以在需求相同的地方重復使用。聲明式
    發表于 01-19 11:14

    如何用JS UI框架的List組件畫一個表格?

    UI框架的List組件畫一個表格”。 作者通過List組件快速、高效地構建了一個自定義表格。接下來,讓我們一起見證作者是如何遇到問題,解決問題,最終
    的頭像 發表于 07-01 10:42 ?2191次閱讀

    華為開發者分論壇HarmonyOS學生公開課-OpenHarmony Codelabs開發案

    2021華為開發者分論壇HarmonyOS學生公開課-OpenHarmony Codelabs開發案
    的頭像 發表于 10-24 11:25 ?1886次閱讀
    華為<b class='flag-5'>開發</b>者分論壇<b class='flag-5'>HarmonyOS</b>學生公開課-OpenHarmony Codelabs<b class='flag-5'>開發案</b>例

    HarmonyOS開發案例:【 switch、chart組件的使用】

    基于switch組件和chart組件實現線形圖、占比圖、柱狀圖,并通過switch切換chart組件數據的動靜態顯示。
    的頭像 發表于 04-25 20:58 ?567次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發案</b>例:【 switch、chart<b class='flag-5'>組件</b>的使用】