当前位置:   article > 正文

鸿蒙开发-ArkTS 语言(二)— ArkUI组件_arkts 使用图片

arkts 使用图片

一.Image:图片显示组件

1.声明Image组件并设置图片源:

Image(src: string| PixelMap| Resource)

加载图片资源
  • 本地资源
  1. Image('images/view.jpg')
  2. .width(200)
  •  网络资源   引入网络图片需申请权限ohos.permission.INTERNET。

 如何申请权限ohos.permission.INTERNET:需要在module.json5配置文件中声明权限。

  1. "requestPermissions": [
  2. {
  3. "name": 'ohos.permission.INTERNET'
  4. }
  5. ]
Image('https://www.example.com/example.JPG') 
  • Resource资源

使用资源格式可以跨包/跨模块引入图片,resources文件夹下的图片都可以通过$r资源接口读取到并转换到Resource格式。

图1 resources

调用方式:

Image($r('app.media.icon'))

还可以将图片放在rawfile文件夹下。

图2 rawfile

 调用方式:

Image($rawfile('snap'))

 2.添加图片属性

  1. Image($r('app.media.icon'))
  2. .width(100)//宽度
  3. .height(120)//高度
  4. .borderRadius(10)//边框圆角
  5. .interpolation(ImageInterpolation.High)//图片插值

更多查看官方文档:显示图片(Image)-显示图形-基于ArkTS的声明式开发范式-UI开发-开发-HarmonyOS应用开发 

二.Text:文本显示组件

1.声明Text组件并设置文本内容

Text(content?:string| Resource)

 创建文本

  • string格式,直接填写文本内容
Text('图片宽度')
  • Resource格式,读取本地资源文件

资源引用类型可以通过$r创建Resource类型对象,文件位置为/resources/base/element/string.json。

Text($r('app.string.width_label'))

2. 添加文本属性

  1. Text('注册账号!')
  2. .lineHeight(32)//行高fontsize(20)//字体大小
  3. .fontColor('#ff1876f8')//字体颜色
  4. .fontWeight(FontWeight.Medium)//字体粗细

更多查看官方文档:文本显示(Text/Span)-添加常用组件-添加组件-基于ArkTS的声明式开发范式-UI开发-开发-HarmonyOS应用开发

三.TextInput:文本输入框 

1.声明TextInput组件:

TextInput( {placeholder?: Resourcestr,text?: ResourceStr})

  • 单行输入框 
TextInput()

  •  多行输入框
TextArea({text:"我是TextArea我是TextArea我是TextArea我是TextArea"}).width(300)

  

 2.添加属性和事件

  1. TextInput({text:'当前输入文本'})
  2. .width(150)//宽
  3. .height(30)//高
  4. .backgroundcolor('#FFF')//背最色
  5. .type(InputType.Password)//输入框类型
  6. .onChange(value =>{
  7. //value是用户输入的文本内容
  8. })

TextInput有5种可选类型,分别为Normal基本输入模式、Password密码输入模式、Email邮箱地址输入模式、Number纯数字输入模式、PhoneNumber电话号码输入模式。通过type属性进行设置:

  • 密码输入模式
  1. TextInput()
  2. .type(InputType.Password)

更多查看官方文档:文本输入(TextInput/TextArea)-添加常用组件-添加组件-基于ArkTS的声明式开发范式-UI开发-开发-HarmonyOS应用开发

四.Button:按钮组件 

1.创建按钮

创建不包含子组件的按钮。 
Button(label?: string, options?: { type?: ButtonType, stateEffect?: boolean })

该接口用于创建不包含子组件的按钮,其中label用来设置按钮文字,type用于设置Button类型,stateEffect属性设置Button是否开启点击效果。

  1. Button('Ok', { type: ButtonType.Normal, stateEffect: true })
  2. .borderRadius(8)
  3. .backgroundColor(0x317aff)
  4. .width(90)
  5. .height(40)

创建包含子组件的按钮。
  1. Button({ type: ButtonType.Normal, stateEffect: true }) {
  2. Row() {
  3. Image($r('app.media.loading')).width(20).height(40).margin({ left: 12 })
  4. Text('loading').fontSize(12).fontColor(0xffffff).margin({ left: 5, right: 12 })
  5. }.alignItems(VerticalAlign.Center)
  6. }.borderRadius(8).backgroundColor(0x317aff).width(90).height(40)

设置按钮类型 

Button有三种可选类型,分别为Capsule(胶囊类型)、Circle(圆形按钮)和Normal(普通按钮),通过type进行设置。

  1. //胶囊按钮(默认类型)此类型按钮的圆角自动设置为高度的一半,不支持通过borderRadius属性重新设置圆角。
  2. Button('Disable', { type: ButtonType.Capsule, stateEffect: false })
  3. .backgroundColor(0x317aff)
  4. .width(90)
  5. .height(40)
  6. //圆形按钮 此类型按钮为圆形,不支持通过borderRadius属性重新设置圆角。
  7. Button('Circle', { type: ButtonType.Circle, stateEffect: false })
  8. .backgroundColor(0x317aff)
  9. .width(90)
  10. .height(90)
  11. //普通按钮 此类型的按钮默认圆角为0,支持通过borderRadius属性重新设置圆角。
  12. Button('Ok', { type: ButtonType.Normal, stateEffect: true })
  13. .borderRadius(8)
  14. .backgroundColor(0x317aff)
  15. .width(90)
  16. .height(40)

2.添加属性和事件

  1. Button('点我')
  2. .width(100)
  3. .height(30)type(ButtonType.Normal)// 按钮类型
  4. .onclick(()=>{
  5. //处理点击事件
  6. })

更多查看官方文档:按钮(Button)-添加常用组件-添加组件-基于ArkTS的声明式开发范式-UI开发-开发-HarmonyOS应用开发

五.Slider:滑动条组件

  1. Slider({
  2. min:0//最小值
  3. max:100//最大值
  4. value:40//当前值
  5. step:10//滑动步长
  6. style: sliderstyle.0utset,// InSet
  7. direction: Axis.Horizontal,//Vertical
  8. reverse:false//是否反向滑动
  9. })
  10. .width('90%')
  11. .showTips(true)//是否展示value百分比提示
  12. .blockColor('#36d')
  13. .onChange(value =>{
  14. //value就是当前滑块值
  15. })

更多查看官方文档:slider-基础组件-组件参考(兼容JS的类Web开发范式-ArkUI.Full)-ArkTS API参考-HarmonyOS应用开发

 六.Column与Row

1.纵向布局使用Column容器,横向布局采用Row容器

 2.justifyContent和alignItems分别用来设置主轴和交叉轴的对齐方式

 

示例:

  1. @Entry
  2. @Component
  3. struct ColumnExample {
  4. build() {
  5. Column({ space: 5 }) {
  6. // 设置子元素垂直方向间距为5
  7. Text('space').width('90%')
  8. Column({ space: 5 }) {
  9. Column().width('100%').height(30).backgroundColor(0xAFEEEE)
  10. Column().width('100%').height(30).backgroundColor(0x00FFFF)
  11. }.width('90%').height(100).border({ width: 1 })
  12. // 设置子元素水平方向对齐方式
  13. Text('alignItems(Start)').width('90%')
  14. Column() {
  15. Column().width('50%').height(30).backgroundColor(0xAFEEEE)
  16. Column().width('50%').height(30).backgroundColor(0x00FFFF)
  17. }.alignItems(HorizontalAlign.Start).width('90%').border({ width: 1 })
  18. Text('alignItems(End)').width('90%')
  19. Column() {
  20. Column().width('50%').height(30).backgroundColor(0xAFEEEE)
  21. Column().width('50%').height(30).backgroundColor(0x00FFFF)
  22. }.alignItems(HorizontalAlign.End).width('90%').border({ width: 1 })
  23. Text('alignItems(Center)').width('90%')
  24. Column() {
  25. Column().width('50%').height(30).backgroundColor(0xAFEEEE)
  26. Column().width('50%').height(30).backgroundColor(0x00FFFF)
  27. }.alignItems(HorizontalAlign.Center).width('90%').border({ width: 1 })
  28. // 设置子元素垂直方向的对齐方式
  29. Text('justifyContent(Center)').width('90%')
  30. Column() {
  31. Column().width('90%').height(30).backgroundColor(0xAFEEEE)
  32. Column().width('90%').height(30).backgroundColor(0x00FFFF)
  33. }.height(100).border({ width: 1 }).justifyContent(FlexAlign.Center)
  34. Text('justifyContent(End)').width('90%')
  35. Column() {
  36. Column().width('90%').height(30).backgroundColor(0xAFEEEE)
  37. Column().width('90%').height(30).backgroundColor(0x00FFFF)
  38. }.height(100).border({ width: 1 }).justifyContent(FlexAlign.End)
  39. }.width('100%').padding({ top: 5 })
  40. RowExample()
  41. }
  42. }
  43. @Component
  44. struct RowExample {
  45. build() {
  46. Column({ space: 5 }) {
  47. // 设置子组件水平方向的间距为5
  48. Text('space').width('90%')
  49. Row({ space: 5 }) {
  50. Row().width('30%').height(50).backgroundColor(0xAFEEEE)
  51. Row().width('30%').height(50).backgroundColor(0x00FFFF)
  52. }.width('90%').height(107).border({ width: 1 })
  53. // 设置子元素垂直方向对齐方式
  54. Text('alignItems(Bottom)').width('90%')
  55. Row() {
  56. Row().width('30%').height(50).backgroundColor(0xAFEEEE)
  57. Row().width('30%').height(50).backgroundColor(0x00FFFF)
  58. }.width('90%').alignItems(VerticalAlign.Bottom).height('15%').border({ width: 1 })
  59. Text('alignItems(Center)').width('90%')
  60. Row() {
  61. Row().width('30%').height(50).backgroundColor(0xAFEEEE)
  62. Row().width('30%').height(50).backgroundColor(0x00FFFF)
  63. }.width('90%').alignItems(VerticalAlign.Center).height('15%').border({ width: 1 })
  64. // 设置子元素水平方向对齐方式
  65. Text('justifyContent(End)').width('90%')
  66. Row() {
  67. Row().width('30%').height(50).backgroundColor(0xAFEEEE)
  68. Row().width('30%').height(50).backgroundColor(0x00FFFF)
  69. }.width('90%').border({ width: 1 }).justifyContent(FlexAlign.End)
  70. Text('justifyContent(Center)').width('90%')
  71. Row() {
  72. Row().width('30%').height(50).backgroundColor(0xAFEEEE)
  73. Row().width('30%').height(50).backgroundColor(0x00FFFF)
  74. }.width('90%').border({ width: 1 }).justifyContent(FlexAlign.Center)
  75. }.width('100%')
  76. }
  77. }

 更多查看官方文档:Column-容器组件-组件参考(基于ArkTS的声明式开发范式)-ArkTS API参考-HarmonyOS应用开发

 Row-容器组件-组件参考(基于ArkTS的声明式开发范式)-ArkTS API参考-HarmonyOS应用开发

 七.循环控制

1.ForEach:循环遍历数组,根据数组内容渲染页面组件

 2.if/else:条件控制,根据数据状态的不同,染不同的页面组件

 

 更多查看官方文档:if/else:条件渲染-渲染控制-学习ArkTS语言-入门-HarmonyOS应用开发 

 八.List

列表包含一系列相同宽度的列表项。适合连续、多行呈现同类数据,例如图片和文本。

  1. List({space:7}){
  2. ForEach(
  3. this.items,//循环数组
  4. (item:Item) => {
  5. ListItem(){ //List子组件
  6. ...
  7. }
  8. }
  9. )
  10. }
  11. .width('100%')
  12. .layoutWeight(1) // 设置权重
  13. .alignListItem(ListItemAlign.Center) //使List居中

更多查看官方文档:List-容器组件-组件参考(基于ArkTS的声明式开发范式)-ArkTS API参考-HarmonyOS应用开发

 九.页面路由

页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。

  •  页面栈的最大容量为32个页面。如果超过这个限制,可以调用router.clear()方法清空历史页面栈,释放内存空间。

Router模块提供了两种跳转模式,分别是router.pushUrl()router.replaceUrl()。这两种模式决定了目标页是否会替换当前页。

  • router.pushUrl():目标页不会替换当前页,而是压入页面栈。这样可以保留当前页的状态,并且可以通过返回键或者调用router.back()方法返回到当前页。
  • router.replaceUrl():目标页会替换当前页,并销毁当前页。这样可以释放当前页的资源,并且无法返回到当前页。

同时,Router模块提供了两种实例模式,分别是Standard和Single。

  • Standard:标准实例模式,也是默认情况下的实例模式。每次调用该方法都会新建一个目标页,并压入栈顶。

  • Single:单实例模式。即如果目标页的url在页面栈中已经存在同url页面,则离栈顶最近的同url页面会被移动到栈顶,并重新加载;如果目标页的url在页面栈中不存在同url页面,则按照标准模式跳转。

1.首先要导入HarmonyOS提供的Router模块

import router from '@ohos.router';

2.然后利用router实现跳转、返回等操作:

  1. router.pushUrl({
  2. url: 'pages/Detail' // 目标url
  3. },
  4. router.RouterMode.Standard,//页面模式:RouterMode枚举
  5. (err) => {
  6. if (err) {
  7. console.error(err);//异常响应回调函数
  8. return;
  9. }
  10. console.info('succeeded.');
  11. });

3.可以使用以下几种方式进行页面返回:

返回提示
  1. //返回确认提示
  2. router.showAlertBeforeBackPage({
  3. message:"确定返回吗?"
  4. })
方式一:返回到上一个页面。 
  1. router.showAlertBeforeBackPage({
  2. message:"确定返回吗?"
  3. })
  4. //确定之后才会回退
  5. router.back();

这种方式会返回到上一个页面,即上一个页面在页面栈中的位置。但是,上一个页面必须存在于页面栈中才能够返回,否则该方法将无效。 

方式二:返回到指定页面。
  1. router.back({
  2. url: 'pages/Home'
  3. });

这种方式可以返回到指定页面,需要指定目标页的路径。目标页必须存在于页面栈中才能够返回。

方式三:返回到指定页面,并传递自定义参数信息。
  1. router.back({
  2. url: 'pages/Home',
  3. params: {
  4. info: '来自Home页'
  5. }
  6. });

 这种方式不仅可以返回到指定页面,还可以在返回的同时传递自定义参数信息。这些参数信息可以在目标页中通过调用router.getParams()方法进行获取和解析。

 解析参数 
  1. //获取传递过来的参数
  2. onPageShow() {
  3. const params = router.getParams(); // 获取传递过来的参数对象
  4. const info = params['info']; // 获取info属性的值
  5. }

更多查看官方文档:页面路由(router)-设置页面路由和组件导航-基于ArkTS的声明式开发范式-UI开发-开发-HarmonyOS应用开发

  十.页面动画 

1.属性动画  一加全部加

属性动画是通过设置组件的animation属性来给组件添加动画,当组件的width、height、opacity、backgroundcolor、scale、rotate、translate等属性变更时,可以实现渐变过渡效果。

  1. Text('^_^')
  2. .position({
  3. x:10// x轴坐标
  4. y:0// y轴坐标
  5. })
  6. .rotate({
  7. angle:0//旋转角度
  8. centerX:'50%'// 旋转中心横坐标
  9. centerY:'50%'// 旋转中心纵坐标
  10. })
  11. .animation({
  12. duration: 1000,
  13. curve: Curve,EaseInOut
  14. )

2. 显式动画  更加灵活

显式动画是通过全局animateTo函数来修改组件属性,实现属性变化时的渐变过渡效果。

  1. Text('^_^')
  2. .position({
  3. x:10// x轴坐标
  4. y:0// y轴坐标
  5. })
  6. .rotate({
  7. angle:0//旋转角度
  8. centerX:'50%'// 旋转中心横坐标
  9. centerY:'50%'// 旋转中心纵坐标
  10. })
  11. .onClick(()=>{
  12. animateTo(
  13. {duration:1000},
  14. ()=>{
  15. // 开始游戏,显示小鱼
  16. this.isBegin = true
  17. }
  18. )
  19. })

 3.组件转场动画

  1. // 过度动画 显示动画
  2. .transition({
  3. type:TransitionType.Insert,
  4. opacity:0,
  5. translate:{x:-270}
  6. })

更多查看官方文档:布局更新动画-页面内的动画-使用动画-基于ArkTS的声明式开发范式-UI开发-开发-HarmonyOS应用开发 

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

闽ICP备14008679号