目录

  • HarmonyOS实战
    • 前言
    • 何为卡片编辑功能?
    • 定义编辑界面
      • 界面的交互逻辑
      • 界面的布局

HarmonyOS实战

前言

在前面的天气卡片设计中,我们设计了一个天气类卡片在桌面进行7日天气的直观显示。但其并不具备选择城市切换的功能,实用性并不高。


所以,今天博主将详细介绍鸿蒙原子化开发的编辑交互功能。

何为卡片编辑功能?

首先,我们需要来看一张图,认识一下有无卡片编辑功能样式到底有何不同。具体效果图如下所示:


可以看到,默认情况下鸿蒙的手机卡片是没有任何编辑功能的,那么如果让其有编辑功能呢?

答案在我们的config.json文件的卡片定义中。示例代码如下:

"forms": [{"jsComponentName": "widget","isDefault": true,"formConfigAbility": "ability://com.liyuanjinglyj.jsweather.slice.WeatherChoiceAbility","scheduledUpdateTime": "10:30","defaultDimension": "2*4","name": "widget","description": "桌面7天天气直观卡片","colorMode": "auto","type": "JS","supportDimensions": ["2*4"],"updateEnabled": true,"updateDuration": 1}
],

感兴趣的读者可以自己按照博文:HarmonyOS实战—卡片的样式设计,创建一个随机的卡片,看看默认定义与这段代码有何不同。

这里,博主就直接给出答案,这里比默认的卡片定义多了一个formConfigAbility属性,该属性就是编辑功能的界面。

在这个界面,用户可以自定义功能进行卡片的更新以及样式的变化。比如这里的天气卡片,我们可以编辑传入城市,然后更新卡片的天气。

定义编辑界面

界面的交互逻辑

尽然说到需要更新天气,那么我们来定义这个编辑界面WeatherChoiceAbility界面,它是一个Java界面,只需要在XML布局中添加控件,进行操作即可。代码如下:

public class WeatherChoiceAbility extends Ability {private static final HiLogLabel TAG = new HiLogLabel(HiLog.DEBUG, 0x0, WeatherChoiceAbility.class.getName());private TextField textField;private Button button;private String url="https://yiketianqi.com/api?version=v9&appid=73913812&appsecret=458XM5hq&city=";private long formId;private String city;@Overrideprotected void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_weather_choice_slice);this.textField=(TextField)findComponentById(ResourceTable.Id_ability_weather_choice_textfield);this.button=(Button)findComponentById(ResourceTable.Id_ability_weather_choice_button);formId=intent.getLongParam(AbilitySlice.PARAM_FORM_IDENTITY_KEY, -1);this.button.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {TaskDispatcher refreshUITask = createParallelTaskDispatcher("", TaskPriority.DEFAULT);refreshUITask.syncDispatch(()->{ZSONArray zsonArray=getData(textField.getText().trim());HiLog.error(TAG,zsonArray.toString());try {ZSONObject object=new ZSONObject();object.put("itemTitle",city);object.put("weatherList",zsonArray);FormBindingData bindingData = new FormBindingData(object);if(!updateForm(formId,bindingData)){HiLog.error(TAG,"updateForm error");}else{terminateAbility();}}catch (Exception e){HiLog.error(TAG,"updateForm error");}});}});}private ZSONArray getData(String cityStr){LYJUtils http = new LYJUtils();String response = http.doGet(url+cityStr);ZSONObject res = ZSONObject.stringToZSON(response);city = res.getString("city");HiLog.info(TAG, city);ZSONArray data = res.getZSONArray("data");WeatherImageMap weatherImageMap=new WeatherImageMap();Map<String,String> map= weatherImageMap.getMap();ZSONArray weatherList=new ZSONArray();for(int i=0;i<data.size();i++){ZSONObject zsonObject = (ZSONObject)data.get(i);ZSONObject newObject=new ZSONObject();newObject.put("image",map.get(zsonObject.getString("wea_day")));newObject.put("wea_day",zsonObject.get("wea_day"));newObject.put("week",zsonObject.get("week"));weatherList.add(newObject);}ZSONObject list_data = (ZSONObject)data.get(0);String content=list_data.getString("date");return weatherList;}
}

代码很简单,基本思路就是获取卡片的id,然后获取用户选择城市的天气信息,最后使用updateForm进行更新。

额外需要注意的是,传递给卡片的数据不能太长,先前博主直接将所有的天气数据updateForm后,直接导致数据丢失,最后只用了3个数据,才传递成功。(具体多长才算长,这个博主也没有研究,尽量只传递卡片需要的数据)

界面的布局

这里使用的ability_weather_choice_slice.xml布局文件只有一个文本框加上一个按钮,示例代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:margin="20vp"ohos:orientation="vertical"ohos:top_margin="100vp"><TextFieldohos:id="$+id:ability_weather_choice_textfield"ohos:height="40vp"ohos:width="match_parent"ohos:background_element="$graphic:textfield_graphic"ohos:hint="请输入城市名(去掉市,县,洲)"ohos:margin="20vp"ohos:padding="5vp"ohos:text_alignment="vertical_center"ohos:text_size="25vp"/><Buttonohos:id="$+id:ability_weather_choice_button"ohos:height="match_content"ohos:width="match_parent"ohos:background_element="$graphic:textfield_graphic"ohos:bottom_padding="5vp"ohos:text="获取城市天气同步到卡片"ohos:text_color="#FF0000"ohos:text_size="25vp"ohos:top_padding="5vp"/></DirectionalLayout>

代码中并没有加入城市的容错判断,感兴趣的可以自己加入,这里博主主要介绍卡片的编辑功能以及信息的同步。

当然,定义的Java界面需要在config.json中定义后才能使用,定义代码如下:

{"orientation": "unspecified","name": "com.liyuanjinglyj.jsweather.slice.WeatherChoiceAbility","icon": "$media:icon","description": "$string:entry_MainAbility","label": "$string:entry_MainAbility","type": "page","launchType": "standard"
}

运行之后,效果如首图所示。

本文源代码地址:https://github.com/liyuanjinglyj/JsWeather

本文正在参与“有奖征文 | HarmonyOS征文大赛”活动:

活动链接:https://marketing.csdn.net/p/ad3879b53f4b8b31db27382b5fc65bbc

HarmonyOS实战—可编辑的卡片交互相关推荐

  1. HarmonyOS实战[一]——原理概念介绍安装:基础篇

    [本文正在参与"有奖征文|HarmoneyOS征文大赛"活动] 相关文章: HarmonyOS实战[一]--原理概念介绍安装:基础篇 HarmonyOS实战[二]-超级详细的原子化 ...

  2. HarmonyOS实战—卡片的样式设计

    目录 HarmonyOS实战 HarmonyOS卡片样式设计 卡片的布局文件 自定义2*4的卡片布局 HarmonyOS实战 HarmonyOS卡片样式设计 从鸿蒙手机的左下角屏幕向上滑动,就能打开我 ...

  3. HarmonyOS之深入解析服务卡片的使用

    一.概述 ① 基本概念 服务卡片(以下简称"卡片")是 FA 的一种界面展示形式,将 FA 的重要信息或操作前置到卡片,以达到服务直达,减少体验层级的目的. 卡片常用于嵌入到其他应 ...

  4. HarmonyOS实战—欧洲杯还可以这么玩?

    目录 HarmonyOS实战 前言 创建卡片 卡片的样式开发 布局设计 index.hml index.css index.json 卡片的交互 卡片数据的初始化 卡片的定时更新 权限设置 Harmo ...

  5. 在HarmonyOS中实现基于JS卡片的音乐播放器

    /   今日科技快讯   / 近日,苹果首席执行官蒂姆·库克接受<时代>杂志专访,谈及他本人对领导力.企业价值和新技术的看法.库克表示,苹果不仅要引领创新,还要努力让世界变得更安全更公平, ...

  6. HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南

    HarmonyOS实战 -基于hi3861芯片鸿蒙2.0的避坑指南 特别说明:本文章与卡片开发无关,想看卡片开发的不用往下读了 最近学习鸿蒙设备开发的过程中遇到了很多问题,因为目前几乎所有设备开发教程 ...

  7. 我的HarmonyOS实战 — 一篇文章讲明白什么是鸿蒙2.0服务卡片

    目录 引言 正文 1. 什么服务卡片? 2. 服务卡片如何设置? 3. 如何取消服务卡片? 4. 服务卡片的设计探索 4.1 创造性的上滑操作 4.2 服务卡片的视觉展示 5. 服务卡片提交流程 6. ...

  8. HarmonyOS 实战——服务卡片初探索

    在刚发布不久的HarmonyOS 2版本的新系统中,[服务卡片]成为一大亮点: 全新的HarmonyOS桌面简洁有序,上滑App生成服务卡片,在桌面即可呈现更丰富的信息. 卡片内容实时更新,只需一瞥即 ...

  9. HarmonyOS实战—亮眼的原子化服务体验

     ##[本文正在参与"有奖征文|HarmoneyOS征文大赛"活动] 他来了他来了,他脚踏祥云走来了. 就像是一声初春的惊雷,响彻在华夏大地,预示着一个崭新的国产化的时代的到来. ...

最新文章

  1. c语言实现数码管显示qq号,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  2. 嵌套类可以先在外围类中声明,然后在外围类中定义
  3. EF mysql 数据迁移_EF Code First Migrations数据库迁移
  4. Oracle 11g 基于CentOS7安装并启动em
  5. 使用Hibernate-Validator优雅的验证RESTful Web Services的参数
  6. mysql约束与外键_MySQL 外键与约束
  7. VS 2005 WEB PROJECT包括Crystal Report水晶报表的发布
  8. c语言 宏定义 去除宏定义_如何检查是否在C中定义了宏?
  9. 3006基于二叉链表的二叉树最长路径的求解(附思路)
  10. 佳能EOS R5逼出性能怪兽索尼A1,2021佳能如何接招?
  11. Docker container 集装箱说明
  12. 通达信手机版分时图指标大全_通达信精选指标——挣开眼就买卖版指标详解
  13. 第一次参加本校大学生创新创业训练项目答辩的反思与总结
  14. 网络流24题23. 火星探险问题
  15. python网络数据采集 第二版_Python网络数据采集 (影印版)第2版
  16. [实用代码] 基于CH554电容触摸屏IIC转USB转IIC方案代码分享
  17. CF19E Fairy (奇偶环,树上差分)
  18. C语言 neutralize函数,因子中性化
  19. Anaconda安装
  20. 时间序列预测-入门概念

热门文章

  1. ​未名企鹅极客 | 流向处理新技术
  2. HDU 2681 MM Programming Club(miaos的线段树维护+ycy的暴力贪心)
  3. 【推荐架构day5】今日头条算法的基本原理
  4. scada系统集成_SCADA、DCS、PLC三者之间的区别
  5. java date只保存年月日_java date 只保留年月日
  6. 2021-12-6 《聪明的投资者》学习笔记-3.一个世纪的股市历史:1972年年初的股价水平-股市周期性。股价、利润和股息
  7. java 反查域名_爬虫实现:根据IP地址反查域名
  8. 公交卡管理系统C语言,关于NFC不能刷公交卡的研究(暂无方法)
  9. Druid简介(可视化)
  10. List集合 查询重复数据,查询重复次数