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

news2025/1/25 9:21:19

    开工大吉!相信大家已经对鸿蒙开发的布局有了基本的了解。之前我们提到过,一个好的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子组件的Text
        Text('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,该样式不支持添加子控件,使用方式如下:

          // 类型为Checkbox
          Toggle({ 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,该样式不支持添加子控件,使用方式如下:

          // 类型为Switch
          Toggle({ 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,该样式支持添加子控件,而且只能包含一个子组件。使用方式如下:

          // 类型为Button
          Toggle({ 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.coloradmin.cn/o/1454227.html

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

相关文章

【开源】JAVA+Vue.js实现城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统,支持…

Python编程中的异常处理

什么是异常? 程序错误(errors)有时也被称为程序异常(exceptions),这是每个编程人员都会经常遇到的问题。在过去,当遇到这类情况时,程序会终止执行并显示错误信息,通常是…

纪念自己挖到的第一个CNVD证书

前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 做了那…

高级编程(2)

今天主要讲一下这四个函数接口:fwrite、fread、fprintf、fsancf以及流的定位:ftell、rewind、fseek 函数接口 fwrite fwrite: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 功能: 向流中写入number个对象,每个对象…

java 课程签到管理系统Myeclipse开发mysql数据库web结构jsp编程servlet计算机网页项目

一、源码特点 java 课程签到管理系统是一套完善的java web信息管理系统 采用serlvetdaobean,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0…

【漏洞复现】蓝网科技临床浏览系统信息泄露漏洞

Nx01 产品简介 蓝网科技临床浏览系统是一个专门用于医疗行业的软件系统,主要用于医生、护士和其他医疗专业人员在临床工作中进行信息浏览、查询和管理。 Nx02 漏洞描述 蓝网科技临床浏览系统存在信息泄露漏洞,攻击者可以利用该漏洞获取敏感信息。 Nx03…

C++初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现

介绍完了list类的相关内容后:C初阶:适合新手的手撕list(模拟实现list) 接下来进入新的篇章,stack和queue的介绍以及模拟: 文章目录 1.stack的初步介绍2.stack的使用3.queue的初步介绍4.queue的使用5.容器适…

简洁高效的短链接:优化互联网体验

title: 简洁高效的短链接:优化互联网体验 date: 2024/2/18 13:24:24 updated: 2024/2/18 13:24:24 tags: 短链接长网址缩短美观简洁分享优化点击率提升数据统计用户体验 在互联网时代,我们经常遇到需要分享长网址的情况。长网址不仅不美观,而…

java面试微服务篇

目录 目录 SpringCloud Spring Cloud 的5大组件 服务注册 Eureka Nacos Eureka和Nacos的对比 负载均衡 负载均衡流程 Ribbon负载均衡策略 自定义负载均衡策略 熔断、降级 服务雪崩 服务降级 服务熔断 服务监控 为什么需要监控 服务监控的组件 skywalking 业务…

图解支付文件网关:文件交互的底座

在上一篇《图解支付报文网关:一种低代码报文网关的设计思路与核心代码实现》,我们深入讨论了报文网关的设计与实现,今天和大家聊聊文件网关的设计与实现。 在这篇文章中,你可以了解到文件网关的作用,什么情况下文件网…

stable diffusion webui学习总结(2):技巧汇总

一、脸部修复:解决在低分辨率下,脸部生成异常的问题 勾选ADetailer,会在生成图片后,用更高的分辨率,对于脸部重新生成一遍 二、高清放大:低分辨率照片提升到高分辨率,并丰富内容细节 1、先通过…

多线程---线程同步,线程通信

线程同步 1.概述 线程同步是多线程编程中的一个重要概念,它指的是在多线程环境中,通过一定的机制保证多个线程按照某种特定的方式正确、有序地执行。这主要是为了避免并发问题,如死锁、竞态条件、资源争用等,确保数据的一致性和完…

超强!中科院1区算法改进!改进雪融优化GVSAO-CNN-BiGRU-Attention融合注意力机制预测程序代码!直接运行!

适用平台:Matlab2023版及以上 雪消融优化算法(Snow Ablation Optimizer,SAO),于2023年6月发表在SCI、中科院1区顶级期刊《Expert Systems With Applications》上。该算法刚刚提出,目前还没有套用这个算法的…

【Java EE初阶十七】网络原理(二)

2. 传输层 2.2 TCP协议 2.2.2 关于可靠传输 4.滑动窗口 前面的三个机制,都是在保证 tcp 的可靠性; TCP 的可靠传输,是会影响传输的效率的.(多出了一些等待 ack 的时间,单位时间内能传输的数据就少了); 滑动窗口,就让可靠传输对性能的影响,更…

【摸鱼日常】使用Docker部署RPG网页小游戏

一、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境,快速使用docker部署RPG网页小游戏。 rootWellDone:/home/goodjob# uname -a Linux WellDone 6.5.0-14-generic #14~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 20 18:15:30 UTC 2 x86_64 x86_…

SG5032VAN晶体振荡器规格书

SG5032VAN是一款具备高精度、高稳定性及多功能的石英晶体振荡器,通过锁相环技术和AT晶体单元实现宽频率范围,能够满足各种应用场景的需求。频率范围从73.5 MHz到700 MHz,可以满足多种无线通信设备和系统,供电电压2.5V/3.3V,为用户提供了更加灵活的电源选择。还具备输…

通俗的讲解什么是机器学习之损失函数

想象一下,你在玩一个靶心射击的游戏,你的目标是尽可能让箭簇命中靶心。在这个游戏中,损失函数可以看作是测量你的箭簇与靶心距离的规则。损失函数的值越小,意味着你的箭簇离靶心越近,你的射击技能越好。 在机器学习中…

Mouse Anti-HDM IgE Antibody Assay Kit

哮喘作为一种常见的慢性炎症类疾病,影响着全世界约3亿各年龄段的人。哮喘一般是由于暴露于过敏原(尘螨、宠物皮屑、花粉及霉菌等)引起的,其特征是气流阻塞和支气管痉挛。屋尘螨(house dust mite, HDM)是最常…

贪心算法练习day2

删除字符 1.题目及要求 2.解题思路 1)初始化最小字母为‘Z’,确保任何字母都能与之比较 2)遍历单词,找到当前未删除字母中的最小字母 3)获取当前位置的字母 current word.charAt(i); 4)删…

BUGKU-WEB 变量1

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; flag In the variable !<?php error_reporting(0); include "flag1.php"; highlight_file(__file__); if(isset($_GET[args])){$args $_GET[args];if(!preg_match("/^\w$/",$args…