HarmonyOS实战—天气类卡片设计(一)

简介: HarmonyOS实战—天气类卡片设计(一)

HarmonyOS实战


前言

对于日常的天气类App来说,我们用户应该很少与其进行交互,毕竟都是一些简单的数据,偶尔用到查看即可。


但是,查看7日天气必须打开App非常不方便,如果开发中能够提供一个7日天气卡片到桌面,肯定能获得用户的好感。


所以,今天的内容就是实现一个7日天气的原子化服务。


7日天气的布局

首先,我们肯定需要完善7日天气的布局。


众所周知,7日的天气往往都比较长,那么2*2的卡片肯定是无法满足的。这时候,选择长卡片来实现7日天气往往效果更好。


这里,我们选择2*4的卡片,其index.hml布局代码如下所示:

<div class="card_root_layout">
    <image src="common/refresh.png" class="refresh_image" onclick="refresh"/>
    <list class="weather_list">
        <list-item for="{{weatherList}}" class="list_item">
            <div class="list_div" onclick="routerEvent">
                <text class="list_text">{{$item.wea_day}}</text>
                <image class="list_image" src="{{$item.image}}"/>
                <text class="list_text">{{$item.week}}</text>
            </div>
        </list-item>
    </list>
</div>


从上面的布局,我们很容易分析出布局的样式,肯定有一个横向的List,以及一个主动提供给用户的天气刷新按钮。


卡片的事件定义

除此之外,还有2个点击事件,一个是当用户点击卡片刷新按钮时,会调用refresh方法。当用户点击每天天气时,会直接跳转到应用。


具体的方法定义如下所示(index.json):

{
  "data": {
    "weatherList":""
  },
  "actions": {
    "refresh": {
      "action": "message",
      "params": {
        "mAction": "refresh"
      }
    },
    "routerEvent": {
      "action": "router",
      "bundleName": "com.liyuanjinglyj.jsweather",
      "abilityName": "com.liyuanjinglyj.jsweather.MainAbility",
      "params": {
        "message": "router"
      }
    }
  }
}


其中,action取值为message表示是一个消息事件,取值为router表示为一个路由跳转事件。至于params是参数,用于在Java中区分事件类别与跳转到哪个路由。


获取基础的天气数据

这里,我们是通过天气API网站的接口进行天气的Json数据获取,具体的网址为:https://yiketianqi.com/,注册之后,每个用户有2000次免费的天气获取次数。


其中接口如下所示:

https://yiketianqi.com/api?version=v9&appid=&appsecret=&city=

这里,appid与appsecret在注册之后,网站会提供给用户,至于city表示城市。比如获取北京市天气,这里只需要city=北京即可。


特别注意,这里city的赋值,必须去掉城市最后一个市,洲,县等。比如你输入宜昌市,那么默认都会返回北京的天气,而输入宜昌才能返回宜昌的天气。


返回的Json数据如下图所示:

如上图所示,这里data之上的数据城市以及天气获取时间的基本信息,而data之内数组才是每日的天气,返回的7日天气。


解析Json数据

既然,我们已经知道了json的接口,那么通过程序进行网络请求之后,我们需要解析我们的Json数据为应用所用。


而鸿蒙给我们提供了ZSONObject以及ZSONArray进行Json数据的解析,具体的代码如下所示(WidgetImpl):

public class WidgetImpl extends FormController {
  private String url="https://yiketianqi.com/api?version=v9&appid=(你的appid)&appsecret=(appsecret)&city=";
  private ZSONArray getData(String cityStr){
        LYJUtils http = new LYJUtils();
        String response = http.doGet(url+cityStr);
        ZSONObject res = ZSONObject.stringToZSON(response);
        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.put("image",map.get(zsonObject.getString("wea_day")));
            weatherList.add(zsonObject);
        }
        ZSONObject list_data = (ZSONObject)data.get(0);
        String content=list_data.getString("date");
        return weatherList;
    }
}


如上面代码所示,因为默认天气数据没有提供对应的天气图片,所以这里我们通过WeatherImageMap指定了指定了天气对应图片地址的键值对。


然后,将ZSONArray的7日天气json数据作为返回值。

相关文章
|
3月前
|
定位技术 UED
70. [HarmonyOS NEXT 实战案例九] 旅游景点网格布局(下)
在上一篇教程中,我们学习了如何使用GridRow和GridCol组件实现基本的旅游景点网格布局。本篇教程将在此基础上,深入探讨如何优化布局、添加交互功能,以及实现更多高级特性,打造一个功能完善的旅游景点应用。
85 1
|
3月前
|
容器
69.[HarmonyOS NEXT 实战案例九] 旅游景点网格布局(上)
本教程将详细讲解如何使用HarmonyOS NEXT中的GridRow和GridCol组件实现旅游景点网格布局。通过网格布局,我们可以以美观、规整的方式展示各种旅游景点信息,为用户提供良好的浏览体验。
80 1
|
3月前
|
UED
68.[HarmonyOS NEXT 实战案例八] 电影票务网格布局(下)
在上一篇教程中,我们学习了如何使用GridRow和GridCol组件实现基本的电影票务网格布局。本篇教程将在此基础上,深入探讨如何优化布局、添加交互功能,以及实现更多高级特性,打造一个功能完善的电影票务应用。
73 1
|
3月前
|
开发者 容器
67.[HarmonyOS NEXT 实战案例八] 电影票务网格布局(上)
在移动应用开发中,电影票务应用是一个常见的场景,用户可以通过应用查看正在热映的电影信息,并进行选座购票等操作。本教程将详细讲解如何使用HarmonyOS NEXT的GridRow和GridCol组件实现电影票务应用中的电影列表网格布局,帮助开发者掌握网格布局的基本用法和实现技巧。
87 1
|
3月前
|
UED
66.[HarmonyOS NEXT 实战案例七] 健身课程网格布局(下)
在上一篇教程中,我们学习了如何使用GridRow和GridCol组件实现基本的健身课程网格布局。本篇教程将在此基础上,深入探讨如何优化布局、添加交互功能,以及实现更多高级特性,打造一个功能完善的健身课程应用。
77 1
|
3月前
|
开发者
鸿蒙开发:资讯项目实战之项目初始化搭建
目前来说,我们的资讯项目只是往前迈了很小的一步,仅仅实现了项目创建,步虽小,但概念性的知识很多,这也是这个项目的初衷,让大家不仅仅可以掌握日常的技术开发,也能让大家理解实际的项目开发知识。
鸿蒙开发:资讯项目实战之项目初始化搭建
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
3月前
|
缓存 JavaScript IDE
鸿蒙开发:基于最新API,如何实现组件化运行
手动只是让大家了解切换的原理,在实际开发中,可不推荐手动,下篇文章,我们将通过脚本或者插件,快速实现组件化模块之间的切换,实现独立运行,敬请期待!
115 0
鸿蒙开发:基于最新API,如何实现组件化运行
|
3月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
126 0
|
3月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:健身App
本期分享一个健身App首页的布局实现,顶部采用Stack容器实现重叠背景与偏移效果,列表部分使用List结合Scroll实现可滚动内容。代码结构清晰,适合学习HarmonyOS布局技巧。