為自己的鴻蒙卡片增加編輯能力
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??
前言:
假設(shè)您已經(jīng)知道了如何為鴻蒙應(yīng)用增加服務(wù)卡片,本文重點介紹如何為卡片增加編輯能力。
如果想了解更多關(guān)于創(chuàng)建鴻蒙卡片的知識,請參考鴻蒙官網(wǎng)指南
示例:
有一個應(yīng)用的服務(wù)卡片在沒有編輯功能時,快捷菜單如下,
增加了編輯功能后,快捷菜單變成如下,
可以看到快捷菜單中多了一個“編輯” 菜單,點擊“編輯” ,會打開一個新的頁面,
這個頁面是一個Ability,主要功能是編輯卡片顏色的。
本篇文章介紹如何增加“編輯”菜單,并鏈接到指定的Ability。
知識點:
formConfigAbility參數(shù)
formConfigAbility參數(shù)在配置文件config.json中對應(yīng)的form節(jié)點下,它表示卡片的配置跳轉(zhuǎn)鏈接,采用URI格式,它的作用是指定導(dǎo)航到編輯頁面的 Page ability。
配置格式為:ability://單個ability名字
如果不配置“formConfigAbility”參數(shù),則無卡片編輯功能。
比如上面示例中formConfigAbility的配置在,
config.json文件中module節(jié)點的abilities子節(jié)點下的forms,在擁有編輯功能的form卡片的配置節(jié)點下,
{
"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,
在代碼目錄結(jié)構(gòu)上,我們可以看到,創(chuàng)建了如下文件
ConfigAbility.java,
ConfigAbilitySlice.java,
ability_config.xml
我們創(chuàng)建ConfigAbility的時候,默認(rèn)創(chuàng)建了一個ConfigAbilitySlice,說明默認(rèn)Ability 是由Slice 組成的 ,實際上頁面的加載也可以直接放到Ability里。但當(dāng)頁面內(nèi)容多,無法同時顯示時,我們可以把相同功能設(shè)計到同一個slice里面,在滿足不同條件時加載不同的slice。
我們新增加的這個頁面的默認(rèn)布局文件為ability_config.xml,預(yù)覽如下
我們可以在這個頁面設(shè)計自己需要實現(xiàn)的卡片編輯功能。
2.修改配置文件config.xml
我們在對應(yīng)的卡片form節(jié)點直接增加formConfigAbility屬性,或者修改原來的formConfigAbility屬性
"formConfigAbility": "ability://com.droidzxy.timetable.ConfigAbility",
3.編譯安裝
真機上點擊卡片的編輯菜單,就會出現(xiàn)如下頁面。
4. 讀寫配置
我們一般在編輯界面通常要做一些設(shè)置,這些設(shè)置會反應(yīng)到原來的服務(wù)卡片上,這時,我們想到的最簡單的方法是通過配置文件的方式,在編輯頁面Ability寫配置文件,然后在服務(wù)卡片對應(yīng)的Ability里讀同樣的配置文件,通常會用到類似如下方法
DatabaseHelper databaseHelper = new DatabaseHelper(getContext());
Preferences preferences = databaseHelper.getPreferences("pref");
preferences.putString(“name”, strName);
preferences.flush();
但是,實踐后我們發(fā)現(xiàn),不同的Ability對應(yīng)的getContext()是不一樣的,即使MainAbility和ConfigAbility是在同一個命名空間下,但它們會有各自的配置文件,所以如果用上述方法訪問配置文件,那么是訪問不到相同文件的。我們需要把getContext改為getApplicationContext,即
DatabaseHelper databaseHelper = new DatabaseHelper(getApplicationContext());
這樣在ConfigAbility寫配置文件,然后在MainAbility中讀配置文件時,才能保證讀寫的是同一個文件。
總結(jié):
增加卡片編輯功能就兩步,
- 增加一個Java Ability用于顯示編輯功能;
- 在config.json中增加formConfigAbility屬性并設(shè)置為新加的Ability的完整名字。
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??