当前位置:   article > 正文

鸿蒙开发(七)添加常用控件(上)_鸿蒙系统中用于显示单行文本的控件

鸿蒙系统中用于显示单行文本的控件

    相信大家已经对鸿蒙开发的布局有了基本的了解。之前我们提到过,一个好的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. // 1 直接使用string创建
  2. Text('Hello World')
  3. // 2 引用字符串变量创建
  4. Text(this.message)
  5. // 3 引用资源文件里的string创建
  6. Text($r('app.string.AddWidget_hello'))

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

2、Span

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

注意:

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

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

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

  1. // 创建带Span子组件的Text
  2. Text('Hello World') {
  3. Span('This is ')
  4. .fontColor(Color.Black)
  5. .onClick(() => {
  6. this.message = 'Hello Harmony'
  7. })
  8. Span('Harmony')
  9. .fontStyle(FontStyle.Italic)
  10. .fontColor(Color.Blue)
  11. .textCase(TextCase.UpperCase)
  12. .onClick(() => {
  13. this.message = 'Hello World'
  14. })
  15. }.borderWidth(1).padding(5)

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

三、文本输入(TextInput/TextArea)

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

1、TextInput

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

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

2、TextArea

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

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

    看下两个输入框的效果:

三、按钮 (Button)

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

1、胶囊按钮(Capsule)

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

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

2、圆形按钮(Circle)

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

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

3、普通按钮(Normal)

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

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

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

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

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

四、图片(Image)

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

1、加载images图片

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

    然后通过如下方式加载:

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

2、加载网络图片

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

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

3、加载Resource图片

(1)通过media加载

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

     然后通过如下方式加载:

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

(2)通过rawfile加载

    将图片放在rawfile文件夹下:

    通过如下方式加载:

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

4、加载媒体库图片

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

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

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

五、单选框(Radio)

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

  1. @State radio: string = '选中了单选框1'
  2. Row() {
  3. Text(this.radio){
  4. }
  5. Radio({ value: 'Radio1', group: 'radioGroup' })
  6. .checked(true)
  7. .onChange(() => {
  8. this.radio = '选中了单选框1'
  9. })
  10. Radio({ value: 'Radio2', group: 'radioGroup' })
  11. .checked(false)
  12. .onChange(() => {
  13. this.radio = '选中了单选框2'
  14. })
  15. }.width('100%').justifyContent(FlexAlign.Center)

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

六、 切换按钮(Toggle)

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

1、Checkbox样式

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

  1. // 类型为Checkbox
  2. Toggle({ type: ToggleType.Checkbox, isOn: false })
  3. .onChange((isOn: Boolean) => {
  4. if (isOn) {
  5. promptAction.showToast({ message: '选中1' })
  6. } else {
  7. promptAction.showToast({ message: '取消选中1' })
  8. }
  9. }).margin({ left: 10 })
  10. Toggle({ type: ToggleType.Checkbox, isOn: false })
  11. .onChange((isOn: Boolean) => {
  12. if (isOn) {
  13. promptAction.showToast({ message: '选中2' })
  14. } else {
  15. promptAction.showToast({ message: '取消选中2' })
  16. }
  17. }).margin({ left: 10 })

2、Switch样式

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

  1. // 类型为Switch
  2. Toggle({ type: ToggleType.Switch, isOn: false })
  3. .onChange((isOn: Boolean) => {
  4. if (isOn) {
  5. promptAction.showToast({ message: '选中3' })
  6. } else {
  7. promptAction.showToast({ message: '取消选中3' })
  8. }
  9. }).margin({ left: 30 })
  10. Toggle({ type: ToggleType.Switch, isOn: false })
  11. .onChange((isOn: Boolean) => {
  12. if (isOn) {
  13. promptAction.showToast({ message: '选中4' })
  14. } else {
  15. promptAction.showToast({ message: '取消选中4' })
  16. }
  17. }).margin({ left: 10 })

3、Button样式

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

  1. // 类型为Button
  2. Toggle({ type: ToggleType.Button, isOn: false }) {
  3. Text('上午')
  4. .width(50)
  5. .textAlign(TextAlign.Center)
  6. }.onChange((isOn: Boolean) => {
  7. if (isOn) {
  8. promptAction.showToast({ message: '选中5' })
  9. } else {
  10. promptAction.showToast({ message: '取消选中5' })
  11. }
  12. }).margin({ left: 30 })
  13. Toggle({ type: ToggleType.Button, isOn: false }) {
  14. Text('下午')
  15. .width(50)
  16. .textAlign(TextAlign.Center)
  17. }.onChange((isOn: Boolean) => {
  18. if (isOn) {
  19. promptAction.showToast({ message: '选中6' })
  20. } else {
  21. promptAction.showToast({ message: '取消选中6' })
  22. }
  23. }).margin({ left: 10 })

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

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

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

     最后,分享一款免费看热门电影和电视剧的app,仅限Android:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/985462
推荐阅读
相关标签
  

闽ICP备14008679号