Codelabs 之 时钟FA卡片开发样例 实践 原创 精华
社区有奖征文活动正在进行中:
点此前往:传递知识,共同进步——HarmonyOS卡片特性征文活动
目录
- 时钟FA卡片开发 样例
时钟FA卡片开发 样例
介绍
服务卡片是FA的一种主要信息呈现形式,开发者可以在卡片中展示用户最关心的FA数据,并可以通过点击卡片内容直接打开FA。例如,天气类FA,可以在服务卡片中展示当前的基本天气信息,点击卡片启动天气FA,展示详细的天气数据。
同时,服务卡片支持不同的规格尺寸,开发者可以根据展示的不同内容和布局效果,选用不同的卡片尺寸,支持的尺寸包括:1x2、2x2、2x4 和 4x4。
知识点:
1.对象关系型数据库的使用,如何查询、创建卡片、删除卡片
2.如何更新卡片数据
搭建环境
安装DevEco Studio,详情请参考DevEco Studio下载。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:
如果可以直接访问Internet,只需进行下载HarmonyOS SDK操作。
如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考配置开发环境。
代码结构解读
卡片布局
form_image_with_info_date_card_1_2.xml #1x2规格的卡片
form_image_with_info_date_card_2_2.xml #2x2规格的卡片
form_image_with_info_date_card_2_4.xml #2x4规格的卡片
知识点讲解
1.对象关系映射型数据库的使用,如何查询、创建卡片、删除卡片
首先使用注解定义一张Form表,继承自 OrmObject
定义对象关系型数据库FormDatabase,继承自OrmDatabase
使用DatabaseHelper类获取数据库连接(上下文)OrmContext
操作数据库,使用OrmPredicates组装条件查询卡片,创建Form卡片、删除Form卡片
在MainAbility中,创建卡片和删除卡片的回调函数中onCreateForm/onDeleteForm 构建Form操作卡片
要用到ProviderFormInfo/ComponentProvider。
2.如何更新卡片数据
定时器-----查询卡片,遍历(可能有多个)----使用ComponentProvider封装数据-----调用updateForm方法执行更新。
归纳总结
Q1.服务卡片的规格,也就是22/24 是由layout布局文件决定的吗,有啥区别?
规格主要由config.json 的配置决定,有三处landscapeLayouts、supportDimensions、portraitLayouts,新增规格也要增加对应规格的布局文件,但是规格并不是由布局文件本身决定的。
*说明:三处规格的顺序要一致,否则预览时显示也是有问题的。
config.json
布局文件的命名也不影响规格,但是建议命名统一采用 xxxxx_card_1_2.xml/xxxxx_card_2_2.xml ,支持的规格是个枚举值,参照进行定义就好。
Q2.为什么要更新卡片到DB ?
1.卡片信息需要保存在数据库中,使用OrmContext的delete/insert来操作db中的卡片
2.卡片的数据不需要更新到db,只是更新到显示,使用updateForm方法更新卡片数据的显示
Q3.如何新增一个规格的卡片?
下面以增加一个1*2规格的卡片为例:
1.config.json ,有三处 landscapeLayouts、supportDimensions、portraitLayouts 要增加
2.layout
layout下新增form_image_with_info_date_card_1_2.xml 布局文件
3.ComponentProviderUtils.java
更新几处与规格相关的代码
Q4.ClockCardSlice.java和TimerAbility.java 区别?
1.ClockCardSlice.java 代表的是主能力页,是一个FA,负责主能力页的组件的初始化以及数据的定时更新,使用了form_image_with_info_date_card_2_4.xml 的布局。
2.TimerAbility.java 是一个PA,是一个后台服务,负责不同规格卡片上组件的初始化以及数据的定时更新,点击卡片会打开主能力页。
样例中二者都是实现了组件的初始化和数据定时更新,但相互独立。
效果展示
2x4规格 | 2x2规格 | 1x2规格 |
---|---|---|
![]() |
![]() |
![]() |
完整代码
附件下载
好文,讲解的很详细。
厉害!
如果在加入自定义时钟就更加完善咯O(∩_∩)O哈哈~
学习了
多谢提出宝贵意见哈,恭喜你成为社区明星!
你好,如何在Java卡片中设置点击事件,比如弹出一个toast
可以可以~~ 搞起来用用