鸿蒙应用开发-ArkUI 计算器

一、效果图

        在正式介绍ArkUI计算器应用之前,我们先来一睹其风采。效果图上的计算器界面简洁大方,每个按钮都经过精心设计,颜色搭配恰到好处,使得整体界面既美观又实用。数字、运算符等按钮排列整齐,用户可以一目了然地找到所需的按钮,快速完成计算操作。同时,显示屏部分清晰显示输入的表达式和计算结果,方便用户随时查看。

二、按钮的实现

        要实现计算器中的按钮,我们首先需要使用ArkUI中的Text组件来表示按钮上的文字。每个按钮都是一个独立的个体,因此我们使用Column布局来包裹每个按钮,以便进行统一的样式设置。

        按钮的实现代码已经给出,通过这段代码,我们可以看到如何设置按钮的文字颜色、背景颜色、圆角大小等属性。这些属性的设置对于打造出美观的按钮至关重要。例如,我们选择了合适的颜色搭配,使得按钮在视觉上更加吸引人;同时,设置了较大的圆角,使得按钮呈现出圆润的外观,更加符合现代审美趋势。

代码如下: 

// 使用@Preview装饰器,这通常用于在开发环境中预览组件
@Preview
  // 使用@Component装饰器,表示这是一个ArkUI组件
@Component
export struct CalButton {
  // 定义按钮上显示的数字,默认为'1'
  num: string = '1'
  // 定义按钮的背景颜色,使用十六进制表示,默认为深灰色
  buttonColor: number = 0x333333
  // 定义按钮上文字的颜色,这里使用了Color.White,表示白色
  textColor: number = Color.White
  // 定义文字的大小,默认为40
  textSize: number = 40
  // 定义按钮的宽度,默认为75
  mWidth: number = 75

  build() {
    Column() {
      // 创建一个Text组件,显示按钮上的数字
      Text(`${this.num}`)
        // 设置文字颜色
        .fontColor(this.textColor)
          // 设置文字大小
        .fontSize(this.textSize)
          // 设置文字字体为中等粗细
        .fontWeight(FontWeight.Medium)
    }
    // 设置Column的宽度和高度
    .width(this.mWidth)
    .height(75)
    // 设置背景颜色
    .backgroundColor(this.buttonColor)
    // 设置内容在主轴方向(这里是垂直方向)上居中
    .justifyContent(FlexAlign.Center)
    // 设置边框圆角,使按钮呈现圆形
    .borderRadius(50)
  }
}

 三、计算器页面

        计算器页面的主要组成结构是一行一行的按钮和文本显示区域。这些按钮和文本显示区域都是通过ArkUI中的组件来实现的。我们使用了Row布局来组织每一行的按钮,使得它们能够水平排列;同时,使用了Text组件来显示文本内容,如表达式和计算结果等。

在构建计算器页面时,我们需要注意以下几点:

  1. 布局的合理性:按钮和文本显示区域应该布局合理,方便用户操作。例如,数字按钮应该集中在一起,方便用户快速输入;运算符按钮应该放在数字按钮的周围,方便用户进行运算操作。
  2. 样式的统一性:按钮和文本显示区域的样式应该保持统一,使得整体界面更加协调。我们可以通过设置相同的背景颜色、边框样式等属性来实现样式的统一性。
  3. 响应的及时性:当用户点击按钮或输入文本时,应用应该及时响应并给出反馈。例如,当用户点击数字按钮时,文本显示区域应该及时更新显示的内容;当用户进行运算操作时,应用应该快速计算出结果并显示在文本显示区域中。
import { ExpressionEvaluator } from '../help/CalculateHelper'
import { CalButton } from './CalButton'
import promptAction from '@ohos.promptAction'

@Entry
@Component
struct Index {
  @State result: string = '0' // 最终的结果
  @State cal: string = '' // 计算时的信息 88*88

  build() {
    Column({ space: 10 }) { //主轴方向间隙
      Blank() // 把空隙撑开

      Column() {
        Text(this.result)
          .fontColor(Color.White)
          .fontSize(60)
      }
      .width('100%')
      .alignItems(HorizontalAlign.End)
      .padding({ right: 36 })

      Column() {
        Text(this.cal)
          .fontColor(Color.White)
      }
      .width('100%')
      .alignItems(HorizontalAlign.End)
      .height(15)
      .padding({ right: 36 })

      Row({ space: 10 }) {
        CalButton({
          num: 'AC',
          buttonColor: 0xA5A5A5,
          textColor: Color.Black,
          textSize: 30
        }).onClick(() => {
          this.result = '0' // 归零
          this.cal = '' // 清除用户输入的值
        })

        CalButton({
          num: '+/-',
          buttonColor: 0xA5A5A5,
          textColor: Color.Black,
          textSize: 30
        }).onClick(() => {

        })

        CalButton({
          num: '%',
          buttonColor: 0xA5A5A5,
          textColor: Color.Black,
          textSize: 30
        })

        CalButton({
          num: '÷',
          buttonColor: 0xFF9F0B,
        }).onClick(() => {
          if (this.cal == '' && this.result != '') {
            this.cal = this.result + '/'
          } else {
            this.cal += '/'
          }
        })
      }

      // TODO 7 8 9 ...
      Row({ space: 10 }) {
        CalButton({
          num: '7'
        }).onClick(() => {
          this.cal += '7'
        })

        CalButton({
          num: '8',
        }).onClick(() => {
          this.cal += '8'
        })

        CalButton({
          num: '9',
        }).onClick(() => {
          this.cal += '9'
        })

        CalButton({
          num: 'x',
          buttonColor: 0xFF9F0B,
        }).onClick(() => {
          if (this.cal == '' && this.result != '') {
            this.cal = this.result + '*'
          } else {
            this.cal += '*'
          }
        })
      }

      // TODO 4 5 6 ...
      Row({ space: 10 }) {
        CalButton({
          num: '4'
        }).onClick(() => {
          this.cal += '4'
        })

        CalButton({
          num: '5',
        }).onClick(() => {
          this.cal += '5'
        })

        CalButton({
          num: '6',
        }).onClick(() => {
          this.cal += '6'
        })

        CalButton({
          num: '-',
          buttonColor: 0xFF9F0B,
        }).onClick(() => {
          if (this.cal == '' && this.result != '') {
            this.cal = this.result + '-'
          } else {
            this.cal += '-'
          }
        })
      }

      // TODO 7 8 9 ...
      Row({ space: 10 }) {
        CalButton({
          num: '1'
        }).onClick(() => {
          this.cal += '1'
        })

        CalButton({
          num: '2',
        }).onClick(() => {
          this.cal += '2'
        })

        CalButton({
          num: '3',
        }).onClick(() => {
          this.cal += '3'
        })

        CalButton({
          num: '+',
          buttonColor: 0xFF9F0B,
        }).onClick(() => {
          if (this.cal == '' && this.result != '') {
            this.cal = this.result + '+'
          } else {
            this.cal += '+'
          }
        })
      }

      // TODO 0 . = ...
      Row({ space: 10 }) {
        CalButton({
          num: '0',
          mWidth: 160
        }).onClick(() => {
          this.cal += '0'
        })

        CalButton({
          num: '.',
        }).onClick(() => {
          this.cal += '.'
        })

        CalButton({
          num: '=',
          buttonColor: 0xFF9F0B,
        }).onClick(() => {
          let calHelp = new ExpressionEvaluator()
          let tempResult = `${calHelp.evaluate(this.cal)}`
          this.result = tempResult
          this.cal = ''
        })
      }
      .margin({ bottom: 50 })
    } // 最外层的
    .width('100%')
    .height('100%')
    .backgroundColor(Color.Black)
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/516339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸽哒言讯独家最新im即时通讯系统双端源码下载 (中越双语)带安卓未封装、苹果未封装、PC端(全开源)+部署教程

独家最新im即时通讯系统双端源码下载 (中越双语)带安卓未封装、苹果未封装、PC端(全开源)部署教程鸽哒IM即时通讯系统是一款类似于weixin的即时通讯软件,具有独立开发的特点。与网络其他聊天软件相比,即时聊…

HTMLCSSJS

HTML基本结构 <html><head><title>标题</title></head><body>页面内容</body> </html> html是一棵DOM树, html是根标签, head和body是兄弟标签, body包括内容相关, head包含对内容的编写相关, title 与标题有关.类似html这种…

Word中插入Endnote参考文献时显示乱码

近期在写文章需要插入参考文献&#xff0c;使用Endnote插入时显示乱码&#xff0c;如下图所示&#xff1a; 文章末尾显示{ADDIN EN REFILIST } 解决方法 在网上找了诸多方法尝试也没有解决&#xff0c;最终找到一篇博客介绍了一种方法&#xff1a; word选项—高级&#xff1…

16.springboot项目下使用事务(springboot-016-transaction)

事务是一个完整的功能&#xff0c;也叫作是一个完整的业务 事务只跟什么SQL语句有关&#xff1f;事务只跟DML语句有关系&#xff1a;增删改 DML,DQL,DDL,TCL,DCL 首先添加两个依赖以及MyBatis代码自动生成插件 <!--MySql驱动--><dependency><groupId>mysql…

【C++】探索C++中的类与对象(上)

​​ &#x1f331;博客主页&#xff1a;青竹雾色间. &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ✨人生如寄&#xff0c;多忧何为 ✨ C是一种强大的编程语言&#xff0c;其面向对象的特性使得代码结构更加清晰、易于维护和扩展。在C中&#xff0c;类与…

Elasticsearch 压测实践总结

背景 搜索、ES运维场景离不开压力测试。 1.宿主机层面变更&#xff1a;参数调优 & 配置调整 & 硬件升级2.集群层面变更&#xff1a;参数调优3.索引层面变更&#xff1a;mapping调整 当然还有使用层面变更&#xff0c;使用API调优&#xff08;不属于该文章的讨论范围…

京东获得JD商品详情 API 接口(jd.item_get)的详细使用说明,包括如何通过该接口获取商品的基本信息,包括名称、品牌、产地、规格参数等

通过调用京东商品详情API接口&#xff0c;开发者可以获取商品的基本信息&#xff0c;如名称、品牌、产地、规格参数等。此外&#xff0c;还可以获取商品价格信息&#xff0c;包括原价、促销价和活动信息等。同时&#xff0c;该接口还支持获取商品的销量、评价、图片、描述等详细…

MySQL8.0.36 GTID主从同步失败排查

报错信息&#xff1a; Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 6f577885-e5d0-11ee-a94a-0242c0a80067:1 at source log 7364ffd6441c-bin.000006, end_lo…

C语言 | Leetcode C语言题解之3题无重复字符的最长子串

题目&#xff1a; 题解&#xff1a; int lengthOfLongestSubstring(char * s) {//类似于hash的思想//滑动窗口维护int left 0;int right 0;int max 0;int i,j;int len strlen(s);int haveSameChar 0;for(i 0; i < len ; i ){if(left < right){ //检测是否出现重…

编译好的C++应用程序拷贝到其它电脑,提示dll未找到依赖项的解决方法。

编译好的C应用程序拷贝到其它电脑上&#xff0c;运行时出现提示dll未找到依赖项。 由于dll依赖于其它dll&#xff0c;在开发用电脑上的环境不能完全与其它电脑相同。 解决办法是找到调用到的dll依赖的所有dll&#xff0c;拷贝到运行目录下。 在开发电脑上&#xff1a; 1、开…

7.stack容器的使用

文章目录 stack容器常用接口代码工程运行结果 stack容器 常用接口 /*1.push - 入栈*/ /*2.top - 查看栈顶元素*/ /*3.pop - 出栈*/代码工程 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<stack>using namespace std;/*1.push - 入栈*/ /*2.top…

Advanced RAG 01:讨论未经优化的 RAG 系统存在的问题与挑战

编者按&#xff1a; 自 2023 年以来&#xff0c;RAG 已成为基于 LLM 的人工智能系统中应用最为广泛的架构之一。由于诸多产品的关键功能严重依赖RAG&#xff0c;优化其性能、提高检索效率和准确性迫在眉睫&#xff0c;成为当前 RAG 相关研究的核心问题。 我们今天为大家带来的这…

书生·浦语 demo1

部署 InternLM2-Chat-1.8B 模型进行智能对话 环境配置 进入开发机后&#xff0c;在 terminal 中输入环境配置命令 studio-conda -o internlm-base -t demo上面命令执行完后&#xff0c;conda会多一个虚拟环境 使用conda activate demo切换环境后&#xff0c;继续后面操作 …

SAP FI学习笔记04 - 基础知识 - 新规会计科目,用 应收账款科目 做个例子

上一章讲了 应付账款 的来源及操作。 SAP FI学习笔记03 - 应付账款-CSDN博客 本章先尝试做一个会计科目&#xff0c;然后再用 应收账款 科目做个例子。 应收账款 和 应付账款 一样&#xff0c;也有两个视图。 1&#xff0c;新建几个会计科目 这一章来尝试着创建会计科目。 …

中国智慧城管哪家做的好?

智慧城市管理综合执法系统建立全市统一的法律法规、裁量基准、执法事项、执法文书和基础信息库&#xff0c;实现从获取线索、立案、调查、处理到结案全过程的信息化和文书制作的智能化。全面支持移动执法办案&#xff0c;提高执法效率。 技术架构&#xff1a; 微服务javasprin…

每日一题:用c语言中指针实现除2操作

目录 一、要求 二、实现代码 三、实现结果 四、关于指针的相关知识 一、要求 二、实现代码 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void change(int *i) {*i*i/2; }int main() {int i;printf("请您输入一个整数&#xff1a;");scanf(&quo…

ABAP开发中常用弹窗的应用详解

在ABAP程序设计中为提示和交互的需要会经常用到弹窗&#xff0c; 所谓弹窗就是弹出一个框&#xff0c;告诉用户什么事情、需要确认什么、或者让用户输入什么内容等等&#xff0c;它价值在于通过提示、提醒、警告&#xff0c;帮助用户顺利完成业务流程中的必要操作或给用户提供实…

实时渲染 -- 材质(Materials)

一、自然界中的材质 首先了解下自然界中的材质 如上这幅图&#xff0c;不同的物体、场景、组合&#xff0c;会让我们看到不同的效果。 我们通常认为物体由其表面定义&#xff0c;表面是物体和其他物体或周围介质之间的边界面。但是物体内部的材质也会影响光照效果。我们目前只…

Day30 回溯 LeedCode 332.重新安排行程 51. N皇后 37. 解数独

332. 重新安排行程 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必须从 JFK…

腾讯云4核8G服务器多少钱?4C8G可以干啥?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…