基于鸿蒙操作———制作健康App(实现Panel底部面板与数字键盘)

目录

前言

项目实现效果

项目框架

Panel底部面板

代码

小结

数字面板项目

代码

小结

知识快递站

结语


前言

通过设置完食物记录面板,在食物记录面板的基础上面,如果进行添加食物的数量以及产生的能量,脂肪,碳水,蛋白质等等详细的信息,最后通过取消或者是确定按钮进行更改,了解组件之间的相互搭配以及修饰符的修饰信息。

项目实现效果

项目框架

Panel底部面板

代码

 Panel(this.showPanel){
          // Button('关闭').onClick(()=>this.showPanel = false)
          //3.1顶部日期
          ItemPanelHeader()
          //3.2记录项卡片
          ItemCard({amount:this.amount,})
          //3.3数字键盘
          NumberKeyboard({amount:$amount,value:$value})
          //3.4按钮
          Row(){
            Button('取消')
              .width(120)
              .backgroundColor($r('app.color.light_gray'))
              .type(ButtonType.Normal)
              .borderRadius(6)
              .onClick(()=>this.showPanel = false)
              .margin({right:10})
            Button('确定')
              .width(120)
              .backgroundColor($r('app.color.primary_color'))
              .type(ButtonType.Normal)
              .borderRadius(6)
              .onClick(()=>this.showPanel = false)
          }
          .margin({top:10})
        }
        .mode(PanelMode.Full)
        .dragBar(false)
        .backgroundMask($r('app.color.light_gray'))
        .backgroundColor(Color.White)


// 顶部日期
import { CommonConstants } from '../../common/constants/CommonConstants'
@Component
export default struct ItemPanelHeader {
  build() {
    Row(){
      Text('2024年1月25日 早餐')
        .fontSize(18).fontWeight(CommonConstants.FONT_WEIGHT_600)
      Image($r('app.media.ic_public_spinner'))
        .width(20)
        .fillColor(Color.Black)
    }
    // 不进行设置宽度就会显示的是,按照文字的长度
    // .width(CommonConstants.THOUSANDTH_940)
  }
}

小结

(1)先是通过在顶部创建showPanel属性类型为布尔型,来控制底部面板的关闭还是跳转;

(2)然后通过ItemPanelHeader()类来添加上面的日期

(3)通过记录卡片来进行对底部面板中的上面显示的内容进行定义;

(4)设置数字面板来进行输入数字然后计算能量脂肪以及蛋白质等等的蕴含的属性是多少。

数字面板项目

代码

import { CommonConstants } from '../../common/constants/CommonConstants'
@Component
export default struct NumberKeyboard {
  numbers:String[] = ['1','2','3','4','5','6','7','8','9','0','.']
  @Link amount:number
  @Link value:string

  // 将样式通过修饰符号进行提取出来
  @Styles keyBoxStyle(){
    .backgroundColor(Color.White)
    .borderRadius(8)
    .height(60)

  }

  build() {
    Grid(){
      ForEach(this.numbers,num=>{
        GridItem(){
          Text(num).fontSize(20).fontWeight(CommonConstants.FONT_WEIGHT_900)
        }
        .keyBoxStyle()
        .onClick(()=>this.clickNumber(num))

      })
      GridItem(){
        Text('删除').fontSize(20).fontWeight(CommonConstants.FONT_WEIGHT_900)
      }
      .keyBoxStyle()
      .onClick(()=>this.clickDelete())
    }
    .width('100%')
    // 设置高度
    .height(280)
    .backgroundColor($r('app.color.index_page_background'))
    .columnsTemplate('1fr 1fr 1fr')
    // 设置行边距
    .columnsGap(8)
    // 设置列边距
    .rowsGap(8)
    .padding(8)
    .margin(10)
  }
  // 创建添加和删除的按钮属性
  clickNumber(num:string){
    //1.拼接用户输入的内容
    let val= this.value+num
    //2.校验输入的格式是否正确
    let firstIndex = val.indexOf('.')
    let lastIndex = val.lastIndexOf('.')
    if(firstIndex != lastIndex || (lastIndex != -1 && lastIndex < val.length-2)){
      // 非法输入
      return
    }
    //3.将字符串转为数值
    let amount = this.parseFloat(val)
    //4.保存
    if(amount >= 999.9){
      this.amount = 999.0
      this.value = '999'
    }else{
      this.amount = amount
      this.value = val
    }
  }

  clickDelete(){
    if(this.value.length<=0){
      this.value = ''
      this.amount = 0
      return
    }else {
      this.value = this.value.substring(0,this.value.length - 1)
      this.amount = this.parseFloat(this.value)
    }
  }

  parseFloat(str:string){
    if(!str){
      return 0
    }
    if(str.endsWith('.')){
      str = str.substring(0,str.length-1)
    }
    return parseFloat(str)
  }
}

小结

以上是数字面板的代码:

(1)开始通过定义数组来进行对数字面板中的数字以及小数点进行收纳,为以后进行使用;

(2)创建amount以及value属性用来控制数字的范围参数;

(3)通过@Styles来进行提取属性参数;

(4)Grid(){}属性指的是创建数字面板的命令,其中包含了columnsGap和rowsGap属性,分别用来控制列与列之间的间距以及行与行之间的间距,columnsTemplate和rowsTemplate分别代表的当前网格布局列的数量以及当前网格布局行的数量等等。

(5)通过foreach循环对GridItem()中number数组进行循环调用添加;

(6)然后通过GridItem()单独对‘删除’键进行添加;

知识快递站

1.本小节学习的组件分别是panel和Grid,Grid(){}属性指的是创建数字面板的命令,其中包含了columnsGap和rowsGap属性,分别用来控制列与列之间的间距以及行与行之间的间距,columnsTemplate和rowsTemplate分别代表的当前网格布局列的数量以及当前网格布局行的数量等等;

2.foreach循环的使用,如果存在数组属性时,通过循环进行属性的持续添加;

3.@styles修饰器对参数的读取,然后封装后进行调用,大大简便了代码的重复率以及冗余。

结语

个人感觉就是熟练地使用代码块,函数;通过修饰符进行对不同类型的包装块进行修饰,出现重复就进行调用,比写十几行几百行的代码是方便的,最后感谢大家支持和点赞吧,会继续更新然后直到结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值