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

    相信大家已经对鸿蒙开发的布局有了基本的了解。之前我们提到过,一个好的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的效果:

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

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

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

相关文章

HarmonyOS SDK,助力开发者打造焕然一新的鸿蒙原生应用

鸿蒙生态千帆启航仪式于1月18日正式启动。从2019年HarmonyOS正式发布到2020年“没有人能够熄灭漫天星光”,今天,满天星光终汇成璀璨星河,HarmonyOS NEXT鸿蒙星河版重磅发布,带来了全新架构、全新体验、全新生态。作为支撑鸿蒙原生…

设计模式——1_5 享元(Flyweight)

今人不见古时月,今月曾经照古人 ——李白 文章目录 定义图纸一个例子:可以复用的样式表绘制表格降本增效?第一步,先分析 变化和不变的地方第二步,把变化和不变的地方拆开来第三步:有没有办法共享这些内容完…

C++(Qt)软件调试---静态分析工具clang-tidy(18)

C(Qt)软件调试—静态分析工具clang-tidy(18) 文章目录 C(Qt)软件调试---静态分析工具clang-tidy(18)1、概述2、clang-tidy基本用法3、目前已有检查项4、Qt Creator中安装clang-tidy5、Qt Creator中使用clang-tidy6、Clang-Tidy配置…

66.Go从零搭建一个orm框架【简版】

文章目录 一:前置学习1、 为什么要用orm2、Golang里面是如何原生连接MySQL的3、ORM框架构想 二: 开始造1、连接Connect2、设置/读取表名Table/GetTable3、新增/替换Insert/Replace4、条件Where5、条件OrWhere6、删除Delete7、修改Update8、查询9、设置查询字段Field…

Linux Shell alias的简单用法:给shell起别名

alias:显示该用户所有起过别名的命令 alias lla‘ls -al’:给ls -al起别名为lla unalias lla:取消lla的别名 1、该命令所有的操作只对个人用户生效,给普通用户起的别名在root用户下不生效,只有回到普通用户才生效。 2…

解决Git添加.gitignore文件后不生效的问题

1. 问题描述 如上图所示,在已存在.gitignore文件且已经提交过的Git管理的项目中,其中.class、.jar文件以及.idea目录内的内容全部都还是被Git管理了,可见.gitignore文件并没有生效。 2. 原因发现 .gitignore文件只能作用于 Untracked Files…

Kafka 问题排查

订单宽表数据不同步 事情的起因是专员在 ze app 上查不到订单了,而订单数据是从 mysql 的 order_search_info 查询的,order_search_info 表的数据是从 oracel 的 BZ_ORDER_INFO 表同步过来的,查不到说明同步有问题 首先重启,同步…

linux性能优化-磁盘I_O优化

1.文件系统 1.1.文件系统的工作原理 文件系统是在磁盘的基础上,提供了一个用来管理文件的树状结构。 接下来我们就看看Linux 文件系统的工作原理。 1.1.1索引节点和目录项 在 Linux 中一切皆文件 ,文件系统,本身是对存储设备上的文件,进行组织管理的…

提升认知,推荐15个面向开发者的中文播客

前言 对于科技从业者而言,无论是自学成才的程序员,还是行业资深人士,终身学习是很有必要的,尤其是在这样一个技术快速迭代更新的时代。 作为一个摆脱了时间和空间限制的资讯分享平台,播客(Podcast&#x…

Parasoft C++Test安装指南_含独立版和插件版

文章目录 前言一、Windows环境下1. 安装独立版CTest2. 安装插件版CTest 二、Linux环境下1. 安装独立版CTest 总结 前言 CTest是Parasoft公司出品的一款可以针对C/C源代码进行静态分析、单元测试、集成测试的测试工具,在C/C白盒测试领域被广泛使用。本篇文章主要讲解…

黑马苍穹外卖学习Day10

文章目录 Spring Task介绍cron表达式入门案例 订单状态定时处理需求分析代码开发功能测试 WebSocket介绍入门案例 来单提醒需求分析代码开发 客户催单需求分析代码开发 Spring Task 介绍 cron表达式 入门案例 订单状态定时处理 需求分析 代码开发 新建一个task包里面编写代码…

140基于matlab的求解转子系统前三个临界转速和主振型的传递矩阵法转子系统的不平衡响应

基于matlab的求解转子系统前三个临界转速和主振型的传递矩阵法转子系统的不平衡响应。参数涉及等截面参数、材料参数、轮盘参数。程序已调通,可直接运行。 140 matlab临界转速及振型 (xiaohongshu.com)

Vue开发者工具是什么?有哪些?

Vue开发者工具是什么? Vue开发者工具是用于Vue.js开发的浏览器扩展,提供了许多有用的功能和工具,帮助开发者更轻松地开发和调试Vue.js应用程序。 Vue开发者工具的功能特点有哪些? 1、组件树视图:Vue开发者工具可以显…

【C++初阶】第二站:类与对象(上) -- 下部分

前言: 本章知识点: 类对象模型、 this 指针 专栏: C初阶 目录 类对象模型 如何计算类对象的大小 类对象的存储方式猜测 结构体内存对齐规则 this指针 this指针的引出 this指针的特性 C语言和C实现Stack的对比 C语言实现 C实现 类对象模型 …

JavaEE:多线程(2):线程状态,线程安全

目录 线程状态 线程安全 线程不安全 加锁 互斥性 可重入 死锁 死锁的解决方法 Java标准库中线程安全类 内存可见性引起的线程安全问题 等待和通知机制 线程饿死 wait notify 线程状态 就绪:线程随时可以去CPU上执行,也包含在CPU上执行的…

SpringBoot 自定义Banner

SpringBoot自定义Banner SpringBoot项目启动的时候会输出一个Spring的图标。 思考🤔 它是在哪个环节的时候输出的呢?是否可以自定义图标呢? 源码分析 通常我们SpringBoot项目是通过SpringBoot.run(Appcation.class)启动的。 run() public Co…

【算法竞赛C++STL基础】栈,链表,队列,优先队列,map,set以及迭代器的用法

文章目录 1,前知——模板函数的实现2, hash 表1,定义2,ASCII码表3,咉射关系 3,迭代器4,STL关系1,stl 的基础关系2,stl 的分类1,相关分类2,相关简介顺序容器关联容器适配容器 3. STL 的相关函数的学习3.1 STL函数中都含…

buctoj——2024寒假集训 进阶训练赛 (五)

问题 A: 约瑟夫问题 题目描述 N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人开始报数,数到M的人出圈;……输出依次出圈的人的编号。N,M由键盘输入。 输入 一行,包含两个正整数…

Linux 入门命令大全汇总 + Linux 集锦大全 【20240122】

文章目录 Linux 入门命令大全汇总Linux 集锦大全更多信息 Linux 入门命令大全汇总 别有一番风趣的alias 刚刚好合适的 apropos 命令 迷你计算器 bc 可看黄道吉日的 cal 全文可查看: Linux入门命令大全全文 Linux 集锦大全 linux终端中最漂亮的几款字体介绍及…

golang学习笔记——http.Handle和http.HandleFunc的区别与type func巧妙运用

文章目录 http.Handle和http.HandleFunc的区别http.Handle分析type func巧妙运用 http.HandleFunc分析总结参考资料 http.Handle和http.HandleFunc的区别 http.Handle和http.HandleFunc的区别体现了Go语言接口的巧妙运用 下面代码启动了一个 http 服务器,监听 808…