「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件

简介: 本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。

本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。

20241218_220213.gif


关键词
  • UI互动应用
  • 天气预报
  • 数据绑定
  • 动态展示
  • 状态管理

一、功能说明

自定义天气预报组件通过静态数据模拟天气服务,用户可以选择城市,并实时显示该城市的天气信息,包括天气图标、温度及文字描述。


二、所需组件

  • @Entry@Component 装饰器
  • ColumnRow 布局组件
  • Text 组件用于显示天气信息
  • Button 组件用于城市选择
  • @State 修饰符用于状态管理
  • Image 组件用于展示天气图标

三、项目结构

  • 项目名称WeatherForecastApp
  • 自定义组件名称WeatherForecastPage
  • 代码文件WeatherForecastPage.etsIndex.ets

四、代码实现

// 文件名:WeatherForecastPage.ets

@Component
export struct WeatherForecastPage {
   
  @State selectedCity: string = '北京'; // 默认城市
  @State weatherIcon: string = 'app.media.sunny';
  @State temperature: string = '25°C';
  @State description: string = '晴天';

  // 更新天气信息
  updateWeather() {
   
    if (this.selectedCity === '北京') {
   
      this.weatherIcon = 'app.media.sunny';
      this.temperature = '25°C';
      this.description = '晴天';
    } else if (this.selectedCity === '上海') {
   
      this.weatherIcon = 'app.media.rainy';
      this.temperature = '18°C';
      this.description = '小雨';
    } else if (this.selectedCity === '广州') {
   
      this.weatherIcon = 'app.media.cloudy';
      this.temperature = '28°C';
      this.description = '多云';
    }
  }

  build() {
   
    Column({
    space: 20 }) {
   
      Text('请选择城市:')
        .fontSize(20)
        .alignSelf(ItemAlign.Start);

      // 城市按钮
      Button('北京')
        .onClick(() => {
   
          this.selectedCity = '北京'; // 设置选择的城市
          this.updateWeather(); // 更新天气信息
        });

      Button('上海')
        .onClick(() => {
   
          this.selectedCity = '上海';
          this.updateWeather();
        });

      Button('广州')
        .onClick(() => {
   
          this.selectedCity = '广州';
          this.updateWeather();
        });

      // 展示天气信息
      Column({
    space: 10 }) {
   
        Image($r(this.weatherIcon)) // 动态显示天气图标
          .width(100)
          .height(100)
          .alignSelf(ItemAlign.Center);

        Text(`${
     this.selectedCity} - ${
     this.temperature}`)
          .fontSize(24)
          .fontWeight(FontWeight.Bold)
          .alignSelf(ItemAlign.Center);

        Text(this.description)
          .fontSize(18)
          .alignSelf(ItemAlign.Center);
      }
    }
    .padding(20)
    .width('100%')
    .height('100%');
  }
}
// 文件名:Index.ets

import {
    WeatherForecastPage } from './WeatherForecastPage';

@Entry
@Component
struct Index {
   
  build() {
   
    Column() {
   
      WeatherForecastPage() // 调用天气预报页面
    }
    .padding(20)
  }
}

效果示例:用户可以通过点击城市按钮(如北京、上海、广州)实时查看该城市的天气图标、温度及描述。

20241218_220213.gif


五、代码解读

  1. 城市选择功能

    • 通过 Button 组件创建多个城市选择按钮,用户点击按钮后会更新显示该城市的天气信息。
  2. 状态管理

    • 使用 @State 修饰符管理当前选择的城市、天气图标、温度和天气描述,实现动态更新。
  3. 天气信息展示

    • 使用 Image 组件动态显示天气图标,Text 组件展示城市、温度及天气描述。

六、优化建议

  1. 支持动态数据源

    • 可以通过后端接口动态获取天气信息,而不是使用静态数据。
  2. 添加更多天气数据

    • 可以扩展显示风速、湿度等天气信息,提供更全面的天气概览。
  3. UI美化

    • 增加背景色、渐变效果等,让界面更加丰富和美观。

七、效果展示

  • 城市选择:用户可以通过按钮选择不同城市,页面会实时更新显示该城市的天气信息。
  • 天气展示:显示当前城市的天气图标、温度和描述。

八、相关知识点


小结

通过自定义天气预报组件的实现,用户可以体验到基于静态数据的城市选择与天气展示功能。该应用适合用于天气展示及实时状态更新的场景。


下一篇预告

在下一篇「UI互动应用篇24 - 虚拟音乐控制台」中,我们将探讨如何实现一个虚拟音乐控制台,支持播放、暂停、切换歌曲等功能,为用户提供完整的音乐交互体验。


上一篇: 「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具

下一篇: 「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台


作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=501
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


目录
相关文章
|
4月前
|
容器
鸿蒙仓颉开发语言实战教程:自定义tabbar
本文介绍了在仓颉语言中实现自定义 tabbar 的完整过程。由于仓颉的 tabbar 组件限制较大,仅支持图片和文字,无法满足复杂样式需求,因此需手动构建带图标与文字的 tabbar 元素,并通过状态判断实现选中效果及点击切换功能。结合 Tabs 容器完成页面切换,适用于 HarmonyOS 商城应用开发。
|
4月前
|
开发者
鸿蒙仓颉开发语言实战教程:自定义组件
本文介绍了如何在仓颉开发语言中创建自定义组件,以封装和管理项目中的 tabbar 组件为例。通过创建独立的组件文件 yltabbar.cj,并使用 @Component 和 @Link 等修饰符实现组件化开发与参数传递,提升代码复用性和项目可维护性。适合希望深入掌握仓颉语言组件开发的 HarmonyOS 开发者学习参考。 #HarmonyOS #仓颉 #购物
|
4月前
|
开发者 容器
44.[HarmonyOS NEXT RelativeContainer案例一] 掌握组件锚点布局:打造灵活精准的UI定位系统
在HarmonyOS NEXT的UI开发中,精确控制组件位置是构建复杂界面的关键。RelativeContainer作为一种强大的布局容器,通过锚点系统提供了精确定位能力,使开发者能够创建出灵活且精准的UI布局。本教程将详细讲解如何使用RelativeContainer的锚点布局功能,帮助你掌握这一核心技术。
139 4
|
1月前
|
JavaScript
鸿蒙应用开发从入门到实战(八):ArkTS自定义组件语法
ArkUI除系统预置的组件外,还支持自定义组件。使用自定义组件,可使代码的结构更加清晰,并且能提高代码的复用性。
|
1月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
181 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
1月前
|
JavaScript 前端开发 开发者
鸿蒙应用开发从入门到实战(六):ArkTS声明式UI和组件化
鸿蒙开发语言ArkTS在继承了Typescrip语法的基础上,主要扩展了声明式UI开发相关的能力。
|
1月前
|
Linux Go iOS开发
IDA 9.2 发布:Golang 改进、新 UI 组件、类型解析等
IDA Pro 9.2 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器
408 0
|
4月前
|
开发者
Uniapp开发鸿蒙应用教程之自定义导航栏
本文介绍了在Uniapp跨平台开发鸿蒙应用时,如何实现自定义导航栏。通过修改pages.json文件可调整默认导航栏样式,但若需添加组件(如搜索框、按钮等),则需手动创建自定义导航栏组件,以适配鸿蒙系统。文中给出了详细的配置代码与实现步骤,帮助开发者灵活控制界面布局。#鸿蒙 #Uniapp #跨平台开发
|
3月前
|
Web App开发 前端开发 JavaScript
Element UI框架中自定义input组件的placeholder样式。
确保这些样式在你的应用程序CSS文件中定义,且该文件已正确加载到项目中。通过以上方法,可以控制Element UI组件中input的placeholder样式,使其满足特定的设计要求。这些更改都是基于CSS伪元素进行的,因此并不会对DOM结构产生改变,保持了原有结构的简洁和高效。
347 12
|
4月前
|
移动开发 开发者
仓颉开发语言入门教程:常见UI组件介绍和一些问题踩坑
仓颉开发语言即将发布一周年,虽已有知名App应用,但教程稀缺且官网文档不够完善。幽蓝君推出系列教程,从零开始系统讲解移动开发。本期介绍常用UI组件:按钮、文本、图片、输入框与搜索框的使用方法及注意事项,帮助开发者快速上手仓颉语言。
下一篇
oss教程