「Mac畅玩鸿蒙与硬件42」UI互动应用篇19 - 数字键盘应用

本篇将带你实现一个数字键盘应用,支持用户通过点击数字键输入数字并实时更新显示内容。我们将展示如何使用按钮组件和状态管理来实现一个简洁且实用的数字键盘。

在这里插入图片描述

关键词
  • UI互动应用
  • 数字键盘
  • 按钮组件
  • 状态管理
  • 用户交互

一、功能说明

数字键盘应用将实现以下功能:

  1. 用户可以点击数字键进行输入。
  2. 输入的数字将实时显示在屏幕上。
  3. 用户可以清除输入的内容或删除最后一个数字。
  4. 每个数字按钮将触发相应的事件,更新显示内容。

二、所需组件
  • @Entry@Component 装饰器
  • ColumnRow 布局组件
  • Button 组件用于实现数字键
  • Text 组件用于显示输入的内容
  • @State 修饰符用于状态管理

三、项目结构
  • 项目名称NumberKeyboardApp
  • 自定义组件名称NumberKeyboardPageNumberButton
  • 代码文件NumberKeyboardPage.etsIndex.etsNumberButton.ets

四、代码实现
// 文件名:NumberKeyboardPage.ets
import { NumberButton } from "./NumberButton";@Component
export struct NumberKeyboardPage {@State input: string = '';  // 显式指定类型为 string// 定义数字按钮内容private buttonRows: string[][] = [['1', '2', '3'],['4', '5', '6'],['7', '8', '9'],['0']];build() {Column({ space: 20 }) {// 显示当前输入Text(`输入: ${this.input}`).fontSize(24).fontWeight(FontWeight.Bold).alignSelf(ItemAlign.Center);// 使用 ForEach 遍历每一行按钮ForEach(this.buttonRows, (row: string[]) => {Row({ space: 10 }) {// 遍历当前行的按钮ForEach(row, (label: string) => {// 使用双向绑定NumberButton({ label: label }).onClick(() => this.input += label);});}});// 清除和删除按钮Row({ space: 10 }) {Button('清空').onClick(() => this.clearInput()).backgroundColor(Color.Red).fontColor(Color.White).width('45%').alignSelf(ItemAlign.Center);Button('删除').onClick(() => this.deleteLastCharacter()).backgroundColor(Color.Gray).fontColor(Color.White).width('45%').alignSelf(ItemAlign.Center);}}.padding(20).width('100%').height('100%').alignItems(HorizontalAlign.Center);}// 清空输入private clearInput() {this.input = '';}// 删除最后一个字符private deleteLastCharacter() {this.input = this.input.slice(0, -1);}
}
// 文件名:Index.ets
import { NumberKeyboardPage } from "./NumberKeyboardPage";  // 引入 NumberKeyboardPage@Entry
@Component
export struct Index {build() {Column({ space: 20 }) {// 渲染 NumberKeyboardPage 组件NumberKeyboardPage();}.padding(20).width('100%').height('100%').alignItems(HorizontalAlign.Center);}
}
// 文件名:NumberButton.ets
@Component
export struct NumberButton {@Prop label: string = '';  // 按钮标签build() {Button(this.label).backgroundColor(Color.Blue).fontColor(Color.White).width('30%').alignSelf(ItemAlign.Center).height(60);}
}

效果示例:用户可以点击数字按钮,输入内容实时更新。点击清空按钮清除所有输入,点击删除按钮删除最后一个字符。

在这里插入图片描述


五、代码解读
  • 按钮组件NumberButton 组件通过 @Prop 获取标签(数字)和父组件,点击按钮时更新父组件的输入内容。
  • 状态管理:通过 @State 管理当前输入的内容,每次点击按钮,输入的数字都会追加到 input 字符串中。
  • 清空和删除:提供清空和删除按钮,分别通过 clearInputdeleteLastCharacter 方法清除输入或删除最后一个字符。

六、优化建议
  1. 增加音效:为按钮点击增加音效,提升交互体验。
  2. 支持小数点:添加小数点按钮,支持浮动数字输入。
  3. 增加历史记录功能:记录用户输入的历史,支持快速恢复和查看之前的输入内容。

七、相关知识点
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙 UI 组件篇1 - Text 和 Button 组件详解
  • 「Mac畅玩鸿蒙与硬件12」鸿蒙 UI 组件篇2 - Column 和 Row 布局组件使用

小结

通过数字键盘的实现,用户可以学习如何使用按钮组件实现简单的用户交互,并掌握如何通过状态管理和组件间的数据传递进行动态界面更新。本应用适合初学者了解按钮交互和状态管理的基本用法。


下一篇预告

在下一篇「UI互动应用篇20 - 闪烁按钮效果」中,我们将展示如何实现一个闪烁按钮效果。该按钮将定期改变颜色,形成闪烁的视觉效果,为用户带来动感的互动体验。


上一篇: 「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器
下一篇: 「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果

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


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI PC处理器ARM架构-引入NPU和大模型

AI PC处理器架构变化:ARM低功耗、引入NPU和大模型 AI进化加速端侧落地,新一轮浪潮蓄势待发(2024)”。ARM(Advanced RISC Machine)架构和x86架构是两种主要的处理器架构,它们在设计理念、应用场景和性能特点等方面有显著的差异。 ARM架构是一…

华为的USG6000为什么不能ping通

前言: 防火墙usg6000v的镜像 链接: https://pan.baidu.com/s/1uLRk0-hnHRTLYLx1Pnplow?pwdtymp 提取码: tymp 看了好多毒文章,感觉写作业更有意思,可以了解新的知识 内容: 首先看毒文章是这样说的,华为的防火墙是…

Mac安装MINIO服务器实现本地上传和下载服务

0.MINIO学习文档 Minio客户端mc使用 | Elibaron学习笔记 1.Mac安装MINIO 中文官方网址:MinIO下载和安装 | 用于创建高性能对象存储的代码和下载内容 (1) brew 安装 brew install minio/stable/minio (2)安装完成,执行brew i…

墨者学院-登录密码重置漏洞分析

声明! 文章所提到的网站以及内容,只做学习交流,其他均与本人无关,切勿触碰法律底线,否则后果自负!!!! 目录标题 前言解题过程总结 前言 在实际渗透测试中,登…

qt QPauseAnimation详解

1、概述 QPauseAnimation是Qt框架中的一个类,专门用于在动画序列中添加暂停效果。它继承自QAbstractAnimation,允许在动画组或动画序列中指定一个时间段的暂停。这对于创建复杂的动画序列非常有用,可以让动画在特定时刻暂停并保持状态。通过…

【热门主题】000076 探索单片机的奥秘:原理、编程与应用全解析

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…

SpringMVC(1)

前言 1. SpringMVC简介 2. 入门案例 第一步导入坐标,SpringMVC和servlet 这样其实就把我们要用的Spring相关的都用上了 第三步就是加载这个bean 写配置类 第四步做一个Tomcat容器启动的配置 还要加上Tomcat插件 我们在创建一个快捷方式 注意由于我的JDK版本高…

jenkins+github+springboot自动部署

背景: 最近看流水线有点意思,就说自己也搞一套。 预期效果: idea提交代码后,GitHub接收,jenkins自动部署。【后续加个自动部署时的代码检查、单元测试、安全测试、sonarqube】 思路分析: idea上的spring代码push到gi…

RabbitMQ 客户端 连接、发送、接收处理消息

RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务,不是像其他服务器一样,负责逻辑处理,然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息, 第一步&a…

MSSQL2022的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序

MSSQL2022导入Excel的一个错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.16.0”提供程序 一、导入情况二、问题发现三、问题解决 最近在安装新版SQLServer SSMS 2022后,每次导入Excel都会出现错误提示:未在本地计算机上注册“Microsoft.AC…

GPT 1到4代的演进笔记

1. GPT-1 标题是 Improving Language Understanding by Generative Pre-Training. 发表于 2018.02, 比 bert(发布于 2018.10) 早了半年. 1.1 动机 困难:NLU 任务是多样的, 有 {textual entailment, question answering, semantic similarity assessment, document classifica…

【06】 MySQL 数据表的约束都有哪些?理解与实践

文章目录 1. 主键约束(Primary Key)2. 外键约束(Foreign Key)3. 唯一约束(Unique)4. 非空约束(Not Null)5. 默认值约束(Default)6. 检查约束(Chec…

element-ui的下拉框报错:Cannot read properties of null (reading ‘disabled‘)

在使用element下拉框时,下拉框option必须点击输入框才关闭,点击其他地方报错:Cannot read properties of null (reading disabled) 造成报错原因:项目中使用了el-dropdown组件,但是在el-dropdown里面没有定义el-dropdo…

工业—使用Flink处理Kafka中的数据_ChangeRecord1

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,当某设备 30 秒状态连续为 “ 预警 ” ,输出预警 信息。当前预警信息输出后,最近30

丹摩征文活动 | AI创新之路,DAMODEL助你一臂之力GPU

目录 前言—— DAMODEL(丹摩智算) 算力服务 直观的感受算力提供商的强大​ 平台功能介绍​ 镜像选择 云磁盘创建 总结 前言—— 只需轻点鼠标,开发者便可拥有属于自己的AI计算王国 - 从丰富的GPU实例选择,到高性能的云磁盘,再到预配置的深度学习…

Java程序调kubernetes(k8s1.30.7)core API简单示例,并解决403权限验证问题,即何进行进行权限授权以及验证

简单记录问题 一、问题描述 希望通过Java程序使用Kubernetes提供的工具包实现对Kubernetes集群core API的调用&#xff0c;但是在高版本上遇见权限验证问题4xx。 <dependency><groupId>io.kubernetes</groupId><artifactId>client-java</artifact…

微信小程序wx.showShareMenu配置全局分享功能

在app.js文件中配置如下即可&#xff1a; onLaunch() {//开启分享功能this.overShare()},/*** 开启朋友圈分享功能* 监听路由切换/自动执行*/overShare() {wx.onAppRoute((res) > {// console.log(route, res)let pages getCurrentPages()let view pages[pages.length - …

生信软件开发1 - 设计一个简单的Windwos风格的GUI报告软件

1. 安装基础库 使用Windows 11标题样式和主题自定义UI窗口库pywinstyles&#xff08;github: https://github.com/Akascape/py-window-styles&#xff09;&#xff0c;结合python自带tkinter库设计一个报告GUI软件。 pip install pywinstyles2. 设计一个简单的Windwos风格的G…

【PlantUML系列】类图(一)

目录 一、类 二、接口 三、抽象类 四、泛型类 五、类之间的关系 六、添加注释 七、包图 八、皮肤参数 一、类 使用class关键字定义类&#xff0c;类名后跟大括号&#xff0c;声明类的属性和方法。 属性&#xff1a;格式为{visibility} attributeName : AttributeType…

复现SMPLify-X: Ubuntu22.04, Cuda-11.3, GPU=3090Ti

Env: 3090Ti CUDA 最低支持版本需要>cuda-11.1 Ubuntu 22.04 Installation: Installing CUDA11.3 wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda_11.3.0_465.19.01_linux.run sudo sh cuda_11.3.0_465.19.01_linux.run …