TestCalculate

6 阅读3分钟

/**

  • 计算器 */ @Entry @Component

struct Calculator{ /创建数组,用来设置计算器按钮上显示的内容/ private buttonTexts = [ 'AC' , 'Del' , '+/-' , '/' , '7' , '8' , '9' , '' , '4' , '5' , '6' , '-' , '1' , '2' , '3' , '+' , '%' , '0' , '.' , '=' ] @State displayText: string = '0' @State firstOperand: number | null = null @State operator: string | null = null @State waitingForSecondOperand: boolean = false /构件界面/ build() { /添加列/ Column(){ /--------------------------添加第一列 上面空白的部分*/ Column(){ }/设置列的样式/ .width('100%') .height('10%') /-------------------------------添加第二列 输入框/ Column(){ /添加文本框用来输入计算/ TextInput() .fontSize(70) .height('80%')/设置文本框的高度/ .textAlign(TextAlign.End)/设置文本框的对齐方式 输入显示在右边/ .backgroundColor(Color.White) .fontColor(Color.Black) .padding({right:20}) }/设置列的样式/ .width('100%') .height('35%') .backgroundColor(Color.White)

  /*------------------------------------添加第三列 按钮框*/
  Column(){
    /*添加网格组件*/
    Grid(){
      /*循环创建计算器的按钮 同时设置按钮上显示的内容*/
      ForEach(this.buttonTexts, (item: string , index) => {
        /*添加网格项*/
        GridItem(){
          /*添加按钮*/
          Button(item)
            .width('100%')/*设置按钮的宽度*/
            .height('100%')/*设置按钮的高度*/
            .fontSize(30)/*设置按钮的字体大小*/
            .borderRadius(50)/*设置按钮的圆角*/
            .backgroundColor(this.setButtonBackgroundColor(item))/*设置按钮的背景颜色*/
            .fontColor(this.setButtonFontColor( item))/*设置按钮的字体颜色*/
            .onClick(()=>{
              //this.handleButonClick(item)
            })
        }
      })
    }/*设置网格的样式*/
    .columnsTemplate('1fr 1fr 1fr 1fr')/*设置4列的模板*/
    .rowsTemplate('1fr 1fr 1fr 1fr 1fr')/*设置5行的模板*/
    .columnsGap(10)
    .rowsGap(10)
  }/*设置列的样式*/
  .width('95%')
  .height('55%')
  .margin(10)/*设置列的边距*/
}/*设置列的样式*/
.width('100%')
.height('100%')

} /创建函数用来处理按钮点击事件//* handleButonClick(item: string) { switch (item) { case 'AC': this.displayText = '0' this.firstOperand = null this.Operand = null this.waitingForSecondOperand = false break case 'Del': if (this.displayText.length > 1 ) { this.displayText = this.displayText.slice(0, -1) } else { this.displayText = '0'; } break case '+/-': const currentValue = parseFloat(this.displayText); this.displayText = String(currentValue * -1) break case '%': const currentValue = parseFloat(this.displayText); this.displayText = String(percentValue); break case '.': if (!this.displayText.includes('.')) { this.displayText += '.' } break case '=': if (this.operator && this.firstOperand !== null) { const secondOperand = parseFloat(this.displayText) let result = 0

      switch (this.operator) {
        case '+':
          result = this.firstOperand + secondOperand
          break
        case '-':
          result = this.firstOperand - secondOperand
          break
        case '*':
          result = this.firstOperand * secondOperand
          break
        case '/':
          result = secondOperand !== 0 ? this.firstOperand / secondOperand : 0
          break
      }

      this.displayText = String(result)
      this.firstOperand = result
      this.operator = null
      this.waitingForSecondOperand = false
    }
    break

  default:
    if (this.waitingForSecondOperand) {
      this.displayText = item
      this.waitingForSecondOperand = false
    } else {
      this.displayText = this.displayText === '0' ? item : this.displayText + item
    }
    break
}

}*/

/***

  • 设置按钮背景颜色 / setButtonBackgroundColor(item: string) { /分支判断/ switch (item) { case '/': case '': case '-': case '+': return '#ffef8282'; case '=': return '#ffdd4637'; default: return '#ededed'; } } /**
  • 创建函数用来设置按钮上显示的内容的颜色 / setButtonFontColor(item: string){ switch( item){ case 'AC': case 'Del': case '+/-': case '/': case '': case '-': case '+': return '#ffef3c3c'; case '=': return '#ffffffff'; default: return '#ff000000'; } } }

WWechat import { window } from '@kit.ArkUI' import { MyPage } from '../component/Mypage' import { WechatPage } from '../component/WechatPage'

/**

  • @Description: 微信主页面
  • @Author: khc
  • @Date: 2026/3/30 9:15
  • @Version: 1.0 */ @Entry @Component struct Home{ /创建变量,用来获取点击选项时选项的索引值/ @State selectedIndex: number = 0

aboutToAppear(): void { /设置全铺整个屏幕/ window.getLastWindow(getContext(),(error,win)=>{ win.setWindowLayoutFullScreen(true) }) } /构造界面/ build() { /添加列/ Column(){ /添加选项卡组件 1: barPosition: BarPosition.End在底部显示 index:指定默认选中的选项 指定选项的索引/ Tabs({barPosition: BarPosition.End,index: this.selectedIndex}){ /-----------------------------------微信/ TabContent(){ /调用微信页面/ //WechatPage() /添加列/ Column(){

      }/*设置列的样式*/
      .width('100%')
      .height('100%')
      .backgroundColor(Color.Red)
    }/*设置选项的标题*/
    //.tabBar('微信')
    .tabBar(this.buildTabBar(0,'微信',$r('app.media.wechat1'),$r('app.media.wechat2')))
    /*------------------------------------通讯录*/
    TabContent(){
      /*添加列*/
      Column(){

      }/*设置列的样式*/
      .width('100%')
      .height('100%')
      .backgroundColor(Color.Green)

    }/*设置选项的标题*/
    //.tabBar('通讯录')
    .tabBar(this.buildTabBar(1,'通讯录',$r('app.media.contacts1'),$r('app.media.contacts2')))
    /*------------------------------------------发现*/
    TabContent(){
      /*添加列*/
      Column(){

      }/*设置列的样式*/
      .width('100%')
      .height('100%')
      .backgroundColor(Color.Blue)


    }/*设置选项的标题*/
    //.tabBar('发现')
    .tabBar(this.buildTabBar(2,'发现',$r('app.media.find1'),$r('app.media.find2')))

    /*------------------------------------------我*/
    TabContent(){
      /*调用MyPage主页面*/
      //MyPage()
      /*添加列*/
      Column(){

      }/*设置列的样式*/
      .width('100%')
      .height('100%')
      .backgroundColor(Color.White)
    }/*设置选项的标题*/
    //.tabBar('我')
    .tabBar(this.buildTabBar(3,'我',$r('app.media.me1'),$r('app.media.me2')))
  }/*设置Tabs的样式*/
  .onChange((index: number)=>{/*index就是选中的选项的索引*/
    /*把选中的索引保存到selectedIndex中*/
    this.selectedIndex = index
  })
}/*设置列的样式*/
.width('100%')/*设置列的宽度*/
.height('100%')/*设置列的高度*/

} /**

  • 创建选项中的内容
  • index 选项的索引
  • title 标题
  • icon 默认的图标
  • selection 选中时的图标
  • */ @Builder buildTabBar(index: number,title: string,icon: Resource,selection: Resource ){ /添加列/ Column(){ /添加图标/ Image(this.selectedIndex == index ? selection:icon) .width(30) .height(30) /添加标题/ Text(title) .fontColor(this.selectedIndex == index ? Color.Green:'')
}/*设置列的样式*/
.width('100%')
.height('65%')

} }