天天看點

為自己的鴻蒙卡片增加編輯能力

春節不停更,此文正在參加「星光計劃-春節更帖活動」

作者:周希元

前言:

假設您已經知道了如何為鴻蒙應用增加服務卡片,本文重點介紹如何為卡片增加編輯能力。

如果想了解更多關于建立鴻蒙卡片的知識,請參考鴻蒙官網指南

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-widget-provider-js-0000001150602175

示例:

有一個應用的服務卡片在沒有編輯功能時,快捷菜單如下,

為自己的鴻蒙卡片增加編輯能力

增加了編輯功能後,快捷菜單變成如下,

為自己的鴻蒙卡片增加編輯能力

可以看到快捷菜單中多了一個“編輯” 菜單,點選“編輯” ,會打開一個新的頁面,

為自己的鴻蒙卡片增加編輯能力

這個頁面是一個Ability,主要功能是編輯卡片顔色的。

本篇文章介紹如何增加“編輯”菜單,并連結到指定的Ability。

知識點:

formConfigAbility參數

formConfigAbility參數在配置檔案config.json中對應的form節點下,它表示卡片的配置跳轉連結,采用URI格式,它的作用是指定導航到編輯頁面的 Page ability。

配置格式為:ability://單個ability名字

如果不配置“formConfigAbility”參數,則無卡片編輯功能。

比如上面示例中formConfigAbility的配置在,

config.json檔案中module節點的abilities子節點下的forms,在擁有編輯功能的form卡片的配置節點下,

{
  "jsComponentName": "motto-1x2",
  "isDefault": false,
  "scheduledUpdateTime": "01:30",
  "defaultDimension": "1*2",
  "formConfigAbility": "ability://com.droidzxy.timetable.ColorAbility",
  "name": "motto",
  "description": "彩色星期",
  "colorMode": "auto",
  "type": "JS",
  "supportDimensions": [
    "1*2"
  ],
           

實踐:

1.增加編輯頁面

我們下面要做的是,新增加一個編輯頁面,然後讓選擇編輯菜單時打開新增加的編輯頁面,

我們在entry->src->main->java上右擊,在快捷菜單中選擇 New->Ability->Empty Page Ability(Java) ,

為自己的鴻蒙卡片增加編輯能力

我們命名為ConfigAbility,

為自己的鴻蒙卡片增加編輯能力

在代碼目錄結構上,我們可以看到,建立了如下檔案

ConfigAbility.java,

ConfigAbilitySlice.java,

ability_config.xml

為自己的鴻蒙卡片增加編輯能力

我們建立ConfigAbility的時候,預設建立了一個ConfigAbilitySlice,說明預設Ability 是由Slice 組成的 ,實際上頁面的加載也可以直接放到Ability裡。但當頁面内容多,無法同時顯示時,我們可以把相同功能設計到同一個slice裡面,在滿足不同條件時加載不同的slice。

我們新增加的這個頁面的預設布局檔案為ability_config.xml,預覽如下

為自己的鴻蒙卡片增加編輯能力

我們可以在這個頁面設計自己需要實作的卡片編輯功能。

2.修改配置檔案config.xml

我們在對應的卡片form節點直接增加formConfigAbility屬性,或者修改原來的formConfigAbility屬性

"formConfigAbility": "ability://com.droidzxy.timetable.ConfigAbility",
           

3.編譯安裝

真機上點選卡片的編輯菜單,就會出現如下頁面。

為自己的鴻蒙卡片增加編輯能力

4. 讀寫配置

我們一般在編輯界面通常要做一些設定,這些設定會反應到原來的服務卡片上,這時,我們想到的最簡單的方法是通過配置檔案的方式,在編輯頁面Ability寫配置檔案,然後在服務卡片對應的Ability裡讀同樣的配置檔案,通常會用到類似如下方法

DatabaseHelper databaseHelper = new DatabaseHelper(getContext());
Preferences preferences = databaseHelper.getPreferences("pref");
preferences.putString(“name”, strName);
preferences.flush();
           

但是,實踐後我們發現,不同的Ability對應的getContext()是不一樣的,即使MainAbility和ConfigAbility是在同一個命名空間下,但它們會有各自的配置檔案,是以如果用上述方法通路配置檔案,那麼是通路不到相同檔案的。我們需要把getContext改為getApplicationContext,即

DatabaseHelper databaseHelper = new DatabaseHelper(getApplicationContext());
           

這樣在ConfigAbility寫配置檔案,然後在MainAbility中讀配置檔案時,才能保證讀寫的是同一個檔案。

總結:

增加卡片編輯功能就兩步,

  1. 增加一個Java Ability用于顯示編輯功能;
  2. 在config.json中增加formConfigAbility屬性并設定為新加的Ability的完整名字;

想了解更多關于鴻蒙的内容,請通路:

51CTO和華為官方合作共建的鴻蒙技術社群

https://harmonyos.51cto.com/#bkwz

繼續閱讀