春節不停更,此文正在參加「星光計劃-春節更帖活動」
作者:周希元
前言:
假設您已經知道了如何為鴻蒙應用增加服務卡片,本文重點介紹如何為卡片增加編輯能力。
如果想了解更多關于建立鴻蒙卡片的知識,請參考鴻蒙官網指南
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-service-widget-provider-js-0000001150602175
示例:
有一個應用的服務卡片在沒有編輯功能時,快捷菜單如下,
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iM0czN2EmN1IDO5gzM1EWZxYzXxQjMzQTMxIzLcFDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
增加了編輯功能後,快捷菜單變成如下,
可以看到快捷菜單中多了一個“編輯” 菜單,點選“編輯” ,會打開一個新的頁面,
這個頁面是一個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中讀配置檔案時,才能保證讀寫的是同一個檔案。
總結:
增加卡片編輯功能就兩步,
- 增加一個Java Ability用于顯示編輯功能;
- 在config.json中增加formConfigAbility屬性并設定為新加的Ability的完整名字;
想了解更多關于鴻蒙的内容,請通路:
51CTO和華為官方合作共建的鴻蒙技術社群
https://harmonyos.51cto.com/#bkwz