鸿蒙实战案例——黑马健康(2)

前言

综合运用本学期所学内容及个人自学知识,使用HarmonyOS 4.0及以上版本开发一款具有实用性和创新 性的移动应用软件。

一、项目介绍

黑马健康App是一款功能全面的健康管理应用,黑马健康App通过提供个性化的饮食记录、健康评估等功能,帮助用户轻松管理健康,改善饮食和生活习惯。 还提供个性化的推荐服务,确保用户能够获得最适合自己的健康和运动建议。总的来说,黑马健康App是一款功能全面、注重个性化推荐的健康管理应用,旨在为用户提供一站式的健康和运动解决方案。

二、具体页面实现

1.首页Tabs

1.整体页面分析

整个首页是使用一个Tabs组件进行构建,Tabs组件可以实现页面内试图内容快速切换,包含TabBar和Tabcontent两个部分。

该app共有三个页面,分别为饮食记录页面,发现页面和我的页面,所以需要在Tabs组件中设置三个Tabcontent与TabBar(主要介绍饮食记录页面)

Tabs({barPosition:BarPosition.End}){
  TabContent(){
    Recordindex()

  }
    .tabBar(this.TabBarBUilder($r('app.string.tab_record'),$r('app.media.ic_calendar'),0))
    TabContent(){
      Text('发现页面')

    }
    .tabBar(this.TabBarBUilder($r('app.string.tab_discover'),$r('app.media.discover'),1))

    TabContent(){
      Text('我的')

    }
    .tabBar(this.TabBarBUilder($r('app.string.tab_user'),$r('app.media.ic_user_portrait'),2))

  }

这里将饮食记录页面的Tabcontent内容设置成了一个自定义组件Recordindex(),在后续会做详细介绍

2.代码

import Recordindex from '../view/record/Recordindex'

@Entry
@Component
struct Index {

@State currentIndex:number=0
  @Builder TabBarBUilder(title: ResourceStr,image:ResourceStr,index:number){  //自定义tabbar

    Column({space:8}){
      Image(image)
        .width(22)
        .fillColor(this.selectColor(index))
      Text(title)
        .fontSize(14)
        .fontColor(this.selectColor(index))
    }

  }
 selectColor(index:number){
   return this.currentIndex === index ? $r('app.color.primary_color') : $r('app.color.gray')
 }
  build(){
  Tabs({barPosition:BarPosition.End}){
  TabContent(){
    Recordindex()

  }
    .tabBar(this.TabBarBUilder($r('app.string.tab_record'),$r('app.media.ic_calendar'),0))
    TabContent(){
      Text('发现页面')

    }
    .tabBar(this.TabBarBUilder($r('app.string.tab_discover'),$r('app.media.discover'),1))

    TabContent(){
      Text('我的')

    }
    .tabBar(this.TabBarBUilder($r('app.string.tab_user'),$r('app.media.ic_user_portrait'),2))

  }
    .width('100%')
    .height('100%')
    .onChange(index => this.currentIndex = index)
  }

}

3.运行结果截图

2.饮食记录页面--顶部搜索栏

1.整体页面分析

饮食记录页面是一个单独的自定义组件,其页面总体分为三个部分,头部搜索栏 Searchheader() 统计卡片 StatsCard() ,纪录列表 RecordList()

本次介绍第一部分头部搜索栏。该部分是用了Search搜索栏组件和一个被Badge组件包裹起来的image组件,Badge组件的作用就是在邮件图片右上角显示红色邮件数量提示。

2.代码

Searchheader.ets

@Component
export default struct Searchheader {
  build() {
    Row({space:6}){
      Search({placeholder:'搜索饮食或运动信息'})
        .textFont({size:18})
        .layoutWeight(1)
   Badge({count:1,position:BadgePosition.RightTop,style:{fontSize:12}}){
     Image($r('app.media.ic_public_email'))
       .width(20)
   }
    }
    .width('94%')

  }
}

3.运行结果截图


总结

通过本次视频的学习,学会了Tabbar组件,Search组件,Badge组件的含义与使用方法,对整体的饮食记录页面进行了大体的布局。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下为B站黑马JavaScript的Ajax案例代码——图书管理案例搜索事件: ```javascript /** * 搜索事件 */ function searchBook() { // 获取搜索框内容 var searchInput = document.querySelector("#searchInput"); var keywords = searchInput.value.trim(); // 如果搜索框内容为空,提示用户 if (keywords == "") { alert("请输入关键字进行搜索!"); return; } // 发送Ajax请求 var xhr = new XMLHttpRequest(); // 创建XmlHttpRequest对象 xhr.open("GET", "/api/book/search?keywords=" + keywords, true); // 配置请求 xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { // 处理响应数据 var books = JSON.parse(xhr.responseText); // 将响应数据转成JavaScript对象 renderBooks(books); // 渲染图书列表 } }; xhr.send(null); // 发送请求 } /** * 渲染图书列表 * @param {*} books 图书列表数据 */ function renderBooks(books) { // 获取图书列表容器 var bookList = document.querySelector("#bookList"); var html = ""; if (books.length > 0) { // 遍历图书列表数据,生成HTML字符串 for (var i = 0; i < books.length; i++) { html += '<tr>'; html += '<td>' + books[i].title + '</td>'; html += '<td>' + books[i].author + '</td>'; html += '<td>' + books[i].category + '</td>'; html += '<td>' + books[i].price + '</td>'; html += '<td>' + books[i].publisher + '</td>'; html += '</tr>'; } } else { // 如果没有搜索到任何图书,提示用户 html = '<tr><td colspan="5">没有搜索到任何图书!</td></tr>'; } // 将生成的HTML字符串添加进图书列表容器 bookList.innerHTML = html; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值