HarmonyOS JS卡片之“星座运势”卡片开发 原创 精华
前言
本人是JS攻城狮,java属于初学状态,写的不好的地方还请多多指教!
为什么决定开发一个星座运势服务卡片?
主要有以下几点:
- 老年人和女性都比较关心运势,卡片类型刚好能够清晰展示运势,同时也不需要太多操作,与服务卡片理念契合(弱交互、强服务)。
- 聚合api上刚好有相应接口,可以直接调用,比较方便。
实现效果
-
实现了三个卡片(2X2、2X4、4X4)和一个内容页,基于api6开发(API 6目前只支持运行在Phone设备的模拟器上,其它设备暂不支持运行),如何使用API 6?点击查看
-
卡片使用原子化布局实现,根据卡片规格自适应。
-
内容页可查询关注的星座,调用接口来获取运势。
创建项目
-
搭建环境,下载开发工具并安装。下载和安装官方文档
-
打开安装好的DevEco Studio软件,创建项目。官方文档
-
填写创建的工程信息 官方文档
Project Type:工程的类型。
Service:原子化服务。原子化服务调试、运行时,在设备桌面上没有应用图标、免安装的。
Application:传统方式需要安装的应用。
Compatible API Version:兼容的SDK最低版本。
Show in Service Center:是否在服务中心露出。如果Project Type为Service,则会同步创建一个2*2的服务卡片模板。
- 创建好的模板,我们主要会用到以下目录
卡片JSUI部分
hml部分
布局
代码
开发过程的问题
- hml文本文字必须写在text标签中
- hml 动态数据不可以一下 写两个
- hml文件中的{{}},动态数据不支持表达式,比如 5 - 1;
- list list-item 标签中无法触发点击事件
css部分
代码部分
遇到的问题
- css boder-raduis 不支持百分比
- css 不支持 嵌套
- css font-size color 不支持继承,font-size color等文本必须写在text标签内,写在父级就不会相应
- css 不支持大部分伪类选择器(:nth-child(n)、:before、:after)
json部分
遇到的问题
- json中定义数组,如 “conAllStarY”: [“Y”, “Y”], 在java中动态修改它为[“Y”, “Y”, “Y”, “Y”],则实际渲染出来有问题。打印出来的数组正确,for循环出来的数组只有两位。最后将初始数组改为空数组才解决了这个bug。
结果:
[“Y”, “Y”, “Y”, “Y”]aa
java代码逻辑
公共类
数据初始化
- 创建卡片时,调用MainAbility中onCreateForm方法
- 实现代码
采用定时刷新,星座运势不需要周期性刷新
- config.js 中设置定时刷新的时间
- 定时刷新会触发widget->WidgetImpl文件的updateFormData方法
内容页部分
- 内容页布局比4X4的卡片多了个输入框,可进行星座搜索
- 内容页布局和css同卡片比较相似,这边就贴一下js代码
- 需要注意hml中for循环时,最好绑定tid,不然会复用。
- 搜索框的value不是双向绑定的,这边需要监听个change事件,来改变value。
- js部分数据请求时,采用api6,需要自己更改配置设置为兼容api6 官方文档
总结
-
JSUI部分,主要是一些布局和样式类,是无法进行数据处理的。做一些弱交互的卡片是非常棒的。
-
Java部分主要也就是用到了三个函数。onStart:主要做一些js方事件处理。onCreateForm:创建卡片的时候需要。updateFormData:定时刷新和周期性刷新会走到这里
-
卡片开发目前来说bug还是挺多,限制也挺多的,期待做的越来越好。
作者:石凡
更多原创内容请关注:开鸿 HarmonyOS 学院
入门到精通、技巧到案例,系统化分享HarmonyOS开发技术,欢迎投稿和订阅,让我们一起携手前行共建鸿蒙生态。
哈哈,挺好的。搞好JS也能开发鸿蒙hhh
可以啊 支持支持
我是老年人
哈哈哈,JS写界面还是挺不错的~
很好的卡片案例哦