「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器

本篇将带你实现一个颜色选择器应用。用户可以从预设颜色中选择,或者通过输入颜色代码自定义颜色来动态更改界面背景。该应用展示了如何结合用户输入、状态管理和界面动态更新的功能。

在这里插入图片描述

关键词
  • UI互动应用
  • 颜色选择器
  • 状态管理
  • 用户输入
  • 界面动态更新

一、功能说明

颜色选择器应用允许用户选择一个颜色,并实时将其应用到界面背景中。用户既可以从预设颜色中选择,也可以输入颜色代码进行自定义。


二、所需组件
  • @Entry@Component 装饰器
  • Column 布局组件
  • TextInput 组件用于用户输入自定义颜色代码
  • Text 组件用于显示提示信息
  • Button 组件用于选择预设颜色
  • Image 组件用于装饰界面
  • @State 修饰符用于状态管理

三、项目结构
  • 项目名称ColorPickerApp
  • 自定义组件名称ColorPickerPage
  • 代码文件ColorPickerPage.etsIndex.ets

四、代码实现
// 文件名:ColorPickerPage.ets@Component
export struct ColorPickerPage {@State selectedColor: string = '#FFFFFF'; // 默认背景色为白色@State customColor: string = ''; // 用户输入的自定义颜色build() {Column({ space: 20 }) {// 显示当前背景色Text(`当前背景色: ${this.selectedColor}`).fontSize(18).fontWeight(FontWeight.Bold).alignSelf(ItemAlign.Center);// 显示猫咪图片Image($r('app.media.cat')).width(85).height(100).borderRadius(5).alignSelf(ItemAlign.Center);// 预设颜色选择器Column({ space: 10 }) {Button('选择 #FF5733').backgroundColor('#FF5733').fontColor(Color.White).onClick(() => this.selectedColor = '#FF5733').width('80%').alignSelf(ItemAlign.Center);Button('选择 #33FF57').backgroundColor('#33FF57').fontColor(Color.White).onClick(() => this.selectedColor = '#33FF57').width('80%').alignSelf(ItemAlign.Center);Button('选择 #3357FF').backgroundColor('#3357FF').fontColor(Color.White).onClick(() => this.selectedColor = '#3357FF').width('80%').alignSelf(ItemAlign.Center);Button('选择 #F1C40F').backgroundColor('#F1C40F').fontColor(Color.White).onClick(() => this.selectedColor = '#F1C40F').width('80%').alignSelf(ItemAlign.Center);}// 用户输入颜色代码TextInput({ placeholder: '输入自定义颜色代码 (如 #123ABC)' }).type(InputType.Normal) // 正确的输入类型.onChange((value: string) => this.customColor = value).width('80%').alignSelf(ItemAlign.Center);// 应用自定义颜色Button('应用自定义颜色').onClick(() => {if (this.validateColor(this.customColor)) {this.selectedColor = this.customColor;} else {this.selectedColor = '#FFFFFF'; // 无效时回退为白色}}).fontSize(18).backgroundColor(Color.Gray).fontColor(Color.White).width('50%').alignSelf(ItemAlign.Center);}.padding(20).width('100%').height('100%').backgroundColor(this.selectedColor).alignItems(HorizontalAlign.Center);}// 验证颜色代码是否合法private validateColor(color: string): boolean {const hexColorPattern = /^#([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})$/;return hexColorPattern.test(color);}
}
// 文件名:Index.etsimport { ColorPickerPage } from './ColorPickerPage';@Entry
@Component
struct Index {build() {Column() {ColorPickerPage() // 调用颜色选择器页面}.padding(20)}
}

效果示例:用户可以通过点击预设颜色按钮或输入颜色代码动态更改界面背景色。
示例中,选择绿色背景后,界面动态更新。

在这里插入图片描述


五、代码解读
  • 状态管理@State selectedColor@State customColor 用于存储当前选定颜色和用户输入的颜色。
  • 预设颜色按钮:通过动态生成按钮列表实现多种颜色选择。
  • 输入颜色代码验证:通过正则表达式检查用户输入是否合法。
  • 动态背景更新:实时根据用户选择的颜色更新背景颜色。

六、优化建议
  1. 增强交互体验:在用户选择颜色时显示渐变过渡动画。
  2. 颜色历史记录:保存最近选择的颜色,便于用户快速使用。
  3. 支持更多格式:扩展输入功能,支持 RGB 或 HSL 格式的颜色代码。

七、相关知识点
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙 UI 组件篇1 - Text 和 Button 组件详解
  • 「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

小结

通过颜色选择器的实现,用户能够体验状态管理、用户输入验证以及动态界面更新的实现方式。这个应用是一个简单但实用的 UI 交互示例。


下一篇预告

在下一篇「UI互动应用篇12 - 简易日历」中,我们将探索如何创建一个简易日历,显示当前月份的日期,并支持选择特定日期的功能。


上一篇: 「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏
下一篇: 「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历

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


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

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

相关文章

【解决安全扫描漏洞】---- 检测到目标站点存在 JavaScript 框架库漏洞

1. 漏洞结果 JavaScript 框架或库是一组能轻松生成跨浏览器兼容的 JavaScript 代码的工具和函数。如果网站使用了存在漏洞的 JavaScript 框架或库,攻击者就可以利用此漏洞来劫持用户浏览器,进行挂马、XSS、Cookie劫持等攻击。 1.1 漏洞扫描截图 1.2 具体…

IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“

参考文章:https://blog.csdn.net/yueeryuanyi/article/details/14211090 问题:IDEA Maven 打包找不到程序包错误或找不到符号,报错“程序包不存在“编译都没问题 解决思路 – >【清除缓存】 1. 强制刷新Maven缓存 选择 Maven 标签,Exe…

设计模式-适配器模式-注册器模式

设计模式-适配器模式-注册器模式 适配器模式 如果开发一个搜索中台,需要适配或接入不同的数据源,可能提供的方法参数和平台调用的方法参数不一致,可以使用适配器模式 适配器模式通过封装对象将复杂的转换过程隐藏于幕后。 被封装的对象甚至…

牛客面经学习【2024/12/1】

电流电压采样电路: 句句在理: 最近组里来了个新人,想表现自己,经常用力过猛。 劝大家,到了新公司,第一件事一定是观察! 这时候做任何事,都不要用力过猛,多做多说多错&am…

记录QT5迁移到QT6.8上的一些问题

经常看到有的同学说网上的教程都是假的,巴拉巴拉,看看人家发布时间,Qt官方的API都会有所变动,多搜索,多总结,再修改记录。 下次遇到问题多这样搜索 QT 4/5/6 xxx document,对比一下就知道…

WRF-Chem模式安装、环境配置、原理、调试、运行方法;数据准备及相关参数设置方法

大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的,也是区域的,甚至是全球的。本地的污染物排放除了对当地造成严重影响外,同时还会在…

「Qt Widget中文示例指南」如何为窗口实现流程布局?(二)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文将展示如何为不…

700M是什么?为什么被称为黄金频段?

5G时代,频谱资源的有效利用成为了通信行业的关键议题。700MHz频段,因其覆盖广、穿透力强的特性,被誉为“5G黄金频段”。 Q 700M是什么? 700M是指700兆赫兹(MHz),是一种无线通信频段。 在无线通信…

移远通信携手紫光展锐,以“5G+算力”共绘万物智联新蓝图

11月26日,2024紫光展锐全球合作伙伴大会在上海举办。作为紫光展锐重要的合作伙伴,移远通信应邀参会。 在下午的物联网生态论坛上,移远通信产品总监胡勇华作题为“5G与算力双擎驱动 引领智联新未来”的演讲,深度剖析了产业发展的趋…

PMP–一、二、三模、冲刺–分类–8.质量管理

文章目录 技巧五、质量管理 一模8.质量管理--质量管理计划--质量管理计划包括项目采用的质量标准,到底有没有满足质量需求,看质量标准即可。6、 [单选] 自项目开始以来,作为项目经理同事的职能经理一直公开反对该项目,在讨论项目里…

RealESRGAN技术详解(附代码)

一、背景与动机 1.研究背景 1.1 图像超分辨率的挑战 图像超分辨率是一个长期存在的计算机视觉问题,它旨在从低分辨率(LR)图像中恢复出高分辨率(HR)图像。由于成像系统的局限性、传输过程中的压缩、存储空间的限制以及…

算法的复杂度

1.数据结构前言 下面的概念有的比较难理解,做个了结就行。 1.1数据结构的起源 在现实生活中我们更多地并不是解决数值计算的问题,而是 需要一些更科学的手段如(表,数,图等数据结构),才能更好…

#渗透测试#红蓝攻防#HW#漏洞挖掘#漏洞复现01-笑脸漏洞(vsftpd)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

matlab2024a安装

1.开始安装 2.点击安装 3.选择安装密钥 4.接受条款 5.安装密钥 21471-07182-41807-00726-32378-34241-61866-60308-44209-03650-51035-48216-24734-36781-57695-35731-64525-44540-57877-31100-06573-50736-60034-42697-39512-63953 6 7.选择许可证文件 8.找许可证文件 9.选…

第二节——计算机网络(四)物理层

车载以太网采用差分双绞线车载以太网并未指定特定的连接器,连接方式更为灵活小巧,能够大大减轻线束重量。传统以太网一般使用RJ45连接器连接。车载以太网物理层需满足车载环境下更为严格的EMC要求,100BASE-T1\1000BASE-T1对于非屏蔽双绞线的传…

电脑还原重置Windows系统不同操作模式

电脑有问题,遇事不决就重启,一切都不是问题!是真的这样吗。其实不然,主机系统重启确实可以自动修复一些文件错误,或者是设置问题,但是,当你由于安装了错误的驱动或者中毒严重,亦或是蓝屏,那么重启这个方子可能就治不了你的电脑了。 那么,除了当主机出现异常故障现象…

Lumos学习王佩丰Excel第十八讲:LOOKUP函数与数组

一、回顾统计函数 1、使用SUMIF函数 sumif(条件区域,求和条件,求和区域) 2、使用SUMIFS函数 SUMIFS(求和范围, 条件范围1, 条件1, 条件范围2, 条件2, ...) 二、认识数组 1、数组生成原理 所谓数组,是有序的元素序列。组成数组的各个变量称为数组的元素。对于Ex…

JVM知识点学习-1

学习视频:狂神说Java 类加载器和双亲委派机制 类加载器 作用:加载Class文件 流程:这里的名字car1。。在栈里面,但是数据在堆里面 类加载器的几个类型: 虚拟机自带的类加载器;启动类(根Boot…

Spring源码的分析之启动流程

一.前言 这篇文章的话就是我个人通过一些技术博客以及自己写一些Demo测试获得的一些感悟但是 由于本人的技术水平有限所以肯定就是会出现一些问题所以希望看这篇文章的时候如果发现错误的时候可以提出来然后我个人的话进行修改 二.SpringApplication 的构造函数 创建的一个简单…

Scala学习记录,全文单词统计

package test32 import java.io.PrintWriter import scala.io.Source //知识点 // 字符串.split("分隔符":把字符串用指定的分隔符,拆分成多个部分,保存在数组中) object test {def main(args: Array[String]): Unit {//从文件1.t…