鸿蒙开发(七)添加常用控件(上)

    相信大家已经对鸿蒙开发的布局有了基本的了解。之前我们提到过,一个好的UI,离不开选择合理的布局。当然,也离不开适当的控件。本篇文章,带着大家一起学习下如何在页面里面添加常用的控件。由于控件较多,我会分为两篇文章来介绍。

目录

一、控件概述

1、控件

2、鸿蒙常用的控件

二、文本显示(Text/Span)

1、Text

2、Span

三、文本输入(TextInput/TextArea)

1、TextInput

2、TextArea

三、按钮 (Button)

1、胶囊按钮(Capsule)

2、圆形按钮(Circle)

3、普通按钮(Normal)

四、图片(Image)

1、加载images图片

2、加载网络图片

3、加载Resource图片

(1)通过media加载

(2)通过rawfile加载

4、加载媒体库图片

五、单选框(Radio)

六、 切换按钮(Toggle)

1、Checkbox样式

2、Switch样式

3、Button样式


鸿蒙系列上一篇:

鸿蒙开发(六)布局概述-CSDN博客文章浏览阅读846次,点赞25次,收藏24次。迄今为止,我还没有正式提到布局的概念。但其实我之前的demo里面,已经默认使用到了一种布局,那就是线性布局(Row、Column),这也是DevEco创建项目默认页面里面默认采用的布局。那么本篇,带着大家一起学习下鸿蒙开发的布局,该篇仅仅是概述,更多的是说理论,后面会有专门的文章去进行布局开发实战。https://blog.csdn.net/qq_21154101/article/details/135703943?spm=1001.2014.3001.5501

一、控件概述

1、控件

    什么是控件呢?控件是指在程序中用于跟人交互的页面元素,是人机交互的重要一环。控件一般有特定的属性和事件,可通过接收用户事件改变自身属性(颜色、大小、内容等),也可以触发相应的逻辑。

    不论是PC端的软件,还是移动端的软件,都离不开人机交互,都离不开页面以及页面中的控件。而各端的软件所支持或提供的基本控件其实都差不多。例如:文本框、按钮、输入框、单选框、进度条、列表、弹窗、视频等。

2、鸿蒙常用的控件

    那么,接下来我们一起看下鸿蒙给开发者提供的常用系统控件。鸿蒙给开发者提供了如下一些常用控件:

文本显示Text/Span
文本输入TextInput/TextArea
按钮Button
图片Image
单选框Radio
切换按钮Toggle
进度条Progress
弹窗CustomDialog
视频Video
气泡PopUp
菜单Menu

二、文本显示(Text/Span)

1、Text

    Text是文本组件,通常用于展示用户的视图,如显示文章的文字。创建Text有如下三种方式,其实都是一样的:

        // 1 直接使用string创建Text('Hello World')// 2 引用字符串变量创建Text(this.message)// 3 引用资源文件里的string创建Text($r('app.string.AddWidget_hello'))

效果如下,其实是一模一样的:

2、Span

    Span只能作为Text组件的子组件显示文本内容。可以在一个Text内添加多个Span来显示一段信息。使用场景一般是一段信息中的文本其风格不同(例如颜色、粗体、倾斜、下划线等)。

注意:

1、Span组件需要写到Text组件内,单独写Span组件不会显示信息。

2、Text与Span同时配置文本内容时,Span内容覆盖Text内容。

    如下示例代码,分别在Text里面实现了两个Span,并分别设置了不同的颜色、风格和点击事件:

        // 创建带Span子组件的TextText('Hello World') {Span('This is ').fontColor(Color.Black).onClick(() => {this.message = 'Hello Harmony'})Span('Harmony').fontStyle(FontStyle.Italic).fontColor(Color.Blue).textCase(TextCase.UpperCase).onClick(() => {this.message = 'Hello World'})}.borderWidth(1).padding(5)

    开模拟器真的超级卡,所以,录屏我也用预览了,看下效果:

三、文本输入(TextInput/TextArea)

    TextInput、TextArea是输入框组件,通常用于响应用户的输入操作。

1、TextInput

    TextInput为单行输入框,通常用于例如登录页面的账号和密码输入,使用如下:

        TextInput({ placeholder: '这是TextInput' }).width('60%').margin({ top: 10 })

2、TextArea

    TextArea为多行输入框,文字超出一行时会自动换行,通常用于例如评论区、发表文章等,使用如下:

        TextArea({ placeholder: '这是TextArea' }).width('60%').margin({ top: 10 })

    看下两个输入框的效果:

三、按钮 (Button)

    Button是按钮控件,通常用于响应用户的点击操作。Button有三种可选类型,分别为Capsule(胶囊类型)、Circle(圆形按钮)和Normal(普通按钮),通过type进行设置。

1、胶囊按钮(Capsule)

    按钮的圆角自动设置为高度的一半,不支持通过borderRadius属性重新设置圆角。

        // 胶囊按钮Button('胶囊按钮', { type: ButtonType.Capsule}).width('25%')

2、圆形按钮(Circle)

    不支持通过borderRadius属性重新设置圆角。

        Button('圆形按钮', { type: ButtonType.Circle}).width('25%')

3、普通按钮(Normal)

    默认圆角为0,支持通过borderRadius属性重新设置圆角。

          // 普通按钮Button('普通按钮', { type: ButtonType.Normal }).width('20%').borderRadius(10).backgroundColor(Color.Red)

    注:可以通过不设置label,给按钮设置子组件图片(关于图片控件的使用下一章节会重点讲解,在此处先用下),用作带有某种功能的按钮。

          Button({ type: ButtonType.Circle }) {Image($r('app.media.app_icon')).width(40).height(40)}.width(60).height(60)

    看下几种按钮的效果(继续纵向布局的话,可能demo的控件快要展现不开了,把几个Button横向布局了):

四、图片(Image)

    我们经常需要在应用中显示一些图片,例如:按钮中的icon、网络图片、本地图片等。展示图片使用Image实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif。

1、加载images图片

    在ets文件夹创建images文件夹,将本地图片放入,完整目录如下:

    然后通过如下方式加载:

// 通过images文件夹加载Image('images/test.png').width('20%').margin({ left: 5 })

2、加载网络图片

    我随便去百度找了一张网络图片,加载网络图片需申请权限ohos.permission.INTERNET(目前看只有真机需要,模拟器暂时不需要),加载方式如下:

// 通过网络url加载Image('https://pics6.baidu.com/feed/f703738da977391215b635829560f615347ae2cc.jpeg@f_auto?token=0460b37fd899a8e8e36557cdc2f4153c').width('20%').margin({ left: 5 })

3、加载Resource图片

(1)通过media加载

    把图片放在media目录下,例如icon.png:

     然后通过如下方式加载:

          // 通过resource加载Image($r('app.media.app_icon')).width('20%').margin({ left: 5 })

(2)通过rawfile加载

    将图片放在rawfile文件夹下:

    通过如下方式加载:

          // 通过rawfile加载Image($rawfile('test1.png')).width('20%').margin({ left: 5 })

4、加载媒体库图片

    还可以通过访问媒体库提供的图片路径来加载图片。我暂时没有真机,后面不给大家演示了,调用方式如下:

// 通过媒体库加载图片
Image('file://media/Photos/5')
.width(200)

    通过以上几种方式加载图片的效果如下(为了防止占用大量布局,我仍然横向加载):

五、单选框(Radio)

    Radio是单选框组件,通常用于提供相应的用户交互选择项,同一组的Radio中只有一个可以被选中。Radio仅支持选中和未选中两种样式,不支持自定义颜色和形状。一般情况下,只有一个Radio被设置为选中,其他的设置为未选中。

     @State radio: string = '选中了单选框1'   Row() {Text(this.radio){}Radio({ value: 'Radio1', group: 'radioGroup' }).checked(true).onChange(() => {this.radio = '选中了单选框1'})Radio({ value: 'Radio2', group: 'radioGroup' }).checked(false).onChange(() => {this.radio = '选中了单选框2'})}.width('100%').justifyContent(FlexAlign.Center)

    如上示例代码,我定义了一个@State的string用于展示选中了哪个单选框,通过Radio的onChange事件去更新string,效果如下:

六、 切换按钮(Toggle)

    切换按钮其实就是复选框,可以选中多个框。Toggle组件提供状态按钮样式,勾选框样式及开关样式,一般用于两种状态之间的切换。

1、Checkbox样式

    通过ToogleType.Checkbox来创建Checkbox样式的Toggle,该样式不支持添加子控件,使用方式如下:

          // 类型为CheckboxToggle({ type: ToggleType.Checkbox, isOn: false }).onChange((isOn: Boolean) => {if (isOn) {promptAction.showToast({ message: '选中1' })} else {promptAction.showToast({ message: '取消选中1' })}}).margin({ left: 10 })Toggle({ type: ToggleType.Checkbox, isOn: false }).onChange((isOn: Boolean) => {if (isOn) {promptAction.showToast({ message: '选中2' })} else {promptAction.showToast({ message: '取消选中2' })}}).margin({ left: 10 })

2、Switch样式

    通过ToogleType.Switch来创建Switch样式的Toggle,该样式不支持添加子控件,使用方式如下:

          // 类型为SwitchToggle({ type: ToggleType.Switch, isOn: false }).onChange((isOn: Boolean) => {if (isOn) {promptAction.showToast({ message: '选中3' })} else {promptAction.showToast({ message: '取消选中3' })}}).margin({ left: 30 })Toggle({ type: ToggleType.Switch, isOn: false }).onChange((isOn: Boolean) => {if (isOn) {promptAction.showToast({ message: '选中4' })} else {promptAction.showToast({ message: '取消选中4' })}}).margin({ left: 10 })

3、Button样式

    通过ToogleType.Button来创建Botton样式的Toggle,该样式支持添加子控件,而且只能包含一个子组件。使用方式如下:

          // 类型为ButtonToggle({ type: ToggleType.Button, isOn: false }) {Text('上午').width(50).textAlign(TextAlign.Center)}.onChange((isOn: Boolean) => {if (isOn) {promptAction.showToast({ message: '选中5' })} else {promptAction.showToast({ message: '取消选中5' })}}).margin({ left: 30 })Toggle({ type: ToggleType.Button, isOn: false }) {Text('下午').width(50).textAlign(TextAlign.Center)}.onChange((isOn: Boolean) => {if (isOn) {promptAction.showToast({ message: '选中6' })} else {promptAction.showToast({ message: '取消选中6' })}}).margin({ left: 10 })

注:通过promptAction.showToast({ message: 'xxx' })来弹Toast

    最后,一起看下这三种Toggle的效果:

    本篇对控件进行了概述,并且详细介绍了文本显示、文本输入、按钮、图片、单选框、切换按钮这六种常用控件。因为控件种类太多,而且后续的控件比起本篇介绍的这六种相对来说略微复杂一些,所以剩下的控件我们会在下一篇文章继续介绍。

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

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

相关文章

Windows®、Linux® 和 UNIX® 系统都适用的远程桌面工具 OpenText ETX

Windows、Linux 和 UNIX 系统都适用的远程桌面工具 OpenText ETX 为 Windows、Linux 和 UNIX 实施精益、经济高效的虚拟化;提供完整的远程 Windows 可用性;以类似本地的性能远程工作;安全地保护系统和知识产权(IP)&am…

关于 Runes 协议及「公开铭刻」发行机制的拓展讨论

撰文:MiX 编辑:Faust,极客 web3 2024 年 3 月 2 日,Runes 生态基础设施项目 Rune alpha 的创始人,在 Github 的公开议题中,与 Runes 协议创始人 Casey 展开了讨论,双方对如何拓展 Runes 协议的…

智慧灯杆-智慧城市照明现状分析(1)

城市道路照明是城市公共设施的重要组成部分,而随着城镇化建设的推进,城市道路照明路灯的数量越来越多,能耗越来越高,供电趋于紧张。此外,城市照明的维护工作和高昂的维护成本(人工控制、路灯巡查等),给城市管理造成了巨大的困难。管理部门需要更有效率的管理和节能方案…

支持向量机 SVM | 线性可分:软间隔模型

目录 一. 软间隔模型1. 松弛因子的解释小节 2. SVM软间隔模型总结 线性可分SVM中,若想找到分类的超平面,数据必须是线性可分的;但在实际情况中,线性数据集存在少量的异常点,导致SVM无法对数据集线性划分 也就是说&…

Kubernetes Operator开发实践

Operator 介绍 Operator 可以看成是 CRD Controller 的一种组合资源。Kubernetes 中的基础资源类型有 Pod、Service、Job、Deployment 等表达能力有限,CRD 则提供了创建新的资源类型方式;Controller 监听 CRD 对象实例的增、删、改事件,然后…

GIS在地质灾害危险性评估与灾后重建中的应用

地质灾害是指全球地壳自然地质演化过程中,由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下,地质灾害在世界范围内频繁发生。我国除滑坡灾害外,还包括崩塌、泥石流、地面沉…

GSA、GSEA、ssGSEA、GSVA用到的统计学知识点

文章目录 概率密度函数(probability density function,PDF)分布函数(Cumulative Distribution Function,CDF)核密度估计(KDE)经验累计分布函数(Empirical Cumulative Dis…

source not found for数组a的引用Exception

identityHashCode(数组名) adressidentityHashCode(a)//将得到数组a的哈希值。在同一个数据类型下,同一对象的哈希值是一样的,同一哈希值对应同一对象。由于不同数据类型的变量哈希值生成算法不同,所以在数据类型不同的情况下&am…

关于esp8266的一些经验汇总,新手必看

说实话,esp8266的nodemcu 已经使用了2年多了,各种问题遇到过,就尝试各种解决,而现在回头来看真的是稀里糊涂的在用,当然这个问题也同样涉及到esp32. 因为最近打算自己打一块esp8266的板,之前打的比较多的是…

Redis冲冲冲——Redis分布式锁如何实现

目录 引出Redis分布式锁如何实现Redis入门1.Redis是什么?2.Redis里面存Java对象 Redis进阶1.雪崩/ 击穿 / 穿透2.Redis高可用-主从哨兵3.持久化RDB和AOF4.Redis未授权访问漏洞5.Redis里面安装BloomFilte Redis的应用1.验证码2.Redis高并发抢购3.缓存预热用户注册验证…

从根到叶:深入理解二叉搜索树

我们的心永远向前憧憬 尽管活在阴沉的现在 一切都是暂时的,转瞬即逝, 而那逝去的将变为可爱 &#x1f31d;(俄) 普希金 <假如生活欺骗了你> 1.二叉搜索树的概念 概念:搜索树&#xff08;Search Tree&#xff09;是一种有序的数据结构&#xff0c;用于存储和组…

Facebook商城号为什么被封?防封养号技巧

由于Facebook商城的高利润空间&#xff0c;越来越多的跨境电商商家注意到它的存在。Facebook作为全球最大、用户量最大的社媒平台&#xff0c;同时也孕育了一个巨大的商业生态&#xff0c;包括广告投放、商城交易等。依托背后的大流量&#xff0c;Facebook商城起号较快&#xf…

优思学院|拉丁方实验设计是什么?

今天&#xff0c;我要给大家带来一个六西格玛实验设计的小窍门——拉丁方设计。这是一种巧妙的方式&#xff0c;帮助我们探索不同因素&#xff08;输入&#xff09;对结果&#xff08;输出&#xff09;的影响&#xff0c;同时巧妙地处理那些我们不想要的“噪音因素”。 想象一…

HEUFT电源维修x-ray发生器维修HBE211226

HEUFT电源维修x-ray发生器维修HBE211253;海富HEUFT在线液位检测X射线发生器维修&#xff0c;不限型型号系列。 德国海富推出HEUFT在线液位检测装置,满瓶检测系统HEUFT有着强大的功能,它的模块机构能整合很多程序,并依据不同的产品及其包装特性,照相技术,高频技术或X-ray技术。…

LInux-多线程基础概念

文章目录 前言预备页表详解缺页中断页表的映射 一、多线程是什么&#xff1f;轻量级进程 二、Pthread库pthread_create 前言 从本章的多线程开始&#xff0c;我们开始进入Linux系统的尾声&#xff0c;所以&#xff0c;在学习多线程的过程中&#xff0c;我们也会逐步对之前的内…

邮件营销新手必读指南?怎样做好邮件营销?

邮件营销的全流程及步骤&#xff1f;做好邮件营销有哪些注意点&#xff1f; 邮件营销作为一种传统却依然高效的推广手段&#xff0c;被众多企业所青睐。对于新手来说&#xff0c;如何开展邮件营销&#xff0c;却是一个值得探讨的话题。AokSend将为你提供一份邮件营销新手必读指…

国家妇女节放假是法定的假日

在这个充满活力和希望的春天&#xff0c;我们迎来了一个特殊的节日——国家妇女节。这是一个属于所有女性的节日&#xff0c;是一个庆祝女性成就、关爱女性权益的时刻。在这个特殊的日子里&#xff0c;我们不禁要问&#xff1a;国家妇女节放假是法定假日吗&#xff1f;让我们一…

Ps:辅助类工具组

工具箱里的辅助类工具为图像编辑和设计提供了重要的支持&#xff0c;能帮助用户更准确地测量、选取颜色或添加注释等。 快捷键&#xff1a;I 吸管工具 Eyedropper Tool 用于从图像中采样颜色。 用户可以通过点击屏幕上的任何点来选取那里的颜色&#xff0c;该颜色随即成为当前的…

Java+SpringBoot+Vue+MySQL实战:打造智能餐厅点餐系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

消息队列以及Kafka的使用

什么是消息队列 消息队列&#xff1a;一般我们会简称它为MQ(Message Queue)。其主要目的是通讯。 ps&#xff1a;消息队列是以日志的形式将数据顺序存储到磁盘当中。通常我们说从内存中IO读写数据的速度要快于从硬盘中IO读写的速度是对于随机的写入和读取。但是对于这种顺序存…