为自己的鸿蒙卡片增加编辑能力 原创 精华

发布于 2022-1-18 10:59
浏览
3收藏

春节不停更,此文正在参加「星光计划-春节更帖活动」

作者:周希元

前言:

假设您已经知道了如何为鸿蒙应用增加服务卡片,本文重点介绍如何为卡片增加编辑能力。
如果想了解更多关于创建鸿蒙卡片的知识,请参考鸿蒙官网指南
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的完整名字;

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-1-19 10:12:46修改
4
收藏 3
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐