学习ArkTS -- 常用组件使用

news2024/11/24 0:20:51

学习ArkTS

  • 使用Deveco studio写ArkTS
  • Image: 图片显示组件
    • 1.声明Image组件并设置图片源
    • 2. 添加图片属性
  • Text: 文本显示组件
    • 1. 声明Text组件并设置文本内容
    • 2. 添加文本属性
  • TextInput:文本输入框
    • 1. 声明TextInput
    • 2. 添加属性和事件
  • Button 组件
    • 1. 声明Button组件,label是按钮文字:
    • 2. 添加属性和事件
  • Slider 滑动条组件
  • 页面布局
    • 线性布局组件
      • Column 容器 按列排序
      • Row 容器 按行排序
    • 常见布局属性
  • 渲染控制
    • ForEach 循环渲染
    • 使用if添加折扣信息
  • List
  • 自定义组件
    • 全局自定义构建函数
    • 自定义公共样式全局/局部都可以

使用Deveco studio写ArkTS

鸿蒙开发指南
新建一个ArkTs的项目一些默认代码的意思。

@Entry   // 装饰器: 用来装饰类结构,方法,变量  // 标记当前组件是入口组件
@Component // 标记自定义组件
struct Index { // 自定义组件: 可复用的UI单元
  @State message: string = 'Hello World' // 标记一个变量是一个状态变量,一旦变量变了,就会更改

  build() { // UI描述: 其内部以声明方式描述UI构建
    Row() {   // 内置组件:ArkUI提供的组件
      Column() {    // 容器组件:用来完成页面布局,例如Row,Column
        Text(this.message)  // 基础组件,自带样式和功能的页面元素,例如Text
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{    // 事件方法:设置组件的事件回调
            // 处理事件
            this.message = 'hello ArkTS!'
          })
          .fontColor('#36D')
      }
      .width('100%')  // 属性方法: 设置组件的UI样式
    }
    .height('100%')
  }
}

Image: 图片显示组件

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

Image(src: string|PixelMap|Resource)
  1. string 格式,通常用来加载网络图片,需要申请网络访问权限:ohos.permission.INTERNET
Image('https://xxx/org')
  1. PixelMap格式,可以加载像素图,常用在图片编辑中
Image(pixelMapObject)
  1. Resource格式,加载本地图片,
Image($r('app.media.xxx')) //加载目录media目录下的,项目工程目录下的文件夹
Image($rawfile('xxx.png')) //加载目录在rawfile目录下的

在这里插入图片描述

2. 添加图片属性

Image($r('app.media.icon'))
	.width(100)	// 宽度
	.height(120)		// 高度
	.borderRadius(10)		//边框圆角
	.interpolation(IamgeInterpolation.High)	// 图片差值

Text: 文本显示组件

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

Text(content?: string| Resource)
1. string格式,直接填写文本内容
Text('图片宽度')
2. Resource格式,读取本地资源文件
3. Text($r('app.string.width_label')) //写在string.json 用来实现国际化的

在这里插入图片描述

2. 添加文本属性

Text('注册账号')
	.lineHeight(20)		//行高
	.fontSize(20)		// 字体大小
	.fontColor('#ff1876f8')		// 自己颜色
	.fontWeight(FontWeight.Medium) // 字体粗细

TextInput:文本输入框

1. 声明TextInput

TextInput({placeholder?: ResourceStr, Text?;ResourceStr})
placeholder:  输入框无输入时的提示文本
TextInput({placeholder:'请输入账号或者手机号'})
Text:输入框当前的文本内容
TextInput({text:'itcast'})

2. 添加属性和事件

TextInput({text:'当前输入的文本'})
	.width(150)		// 宽
	.height(30)		// 高
	.backgroundColor('#FFF')		// 背景色
	.type(InputType.Password)		// 输入框类型 
	.onChange(value=>{
		// value是用户输入的文本内容
})
	除了Password还有以下常用的类型
	名称						描述
	Normal 				基本输入模式,支持输入数字,字母,下划线,空格,特殊字符。
	Password			密码输入模式,支持输入数字,字母,下划线,空格,特殊字符。
	Email				邮箱地址输入模式,支持数字,字母,下划线,以及@字符。
	Number				纯数字输入模式。
	PhoneNumber			电话号码输入模式,支持输入数字,+ - # * 长度不限

Button 组件

1. 声明Button组件,label是按钮文字:

Button(label?: ResourceStr)
label:文字
1. 文字按钮
	Button('点我')
2. 自定义按钮,在button内嵌套其他组件
	Button(){
		Image($r('app.media.search'))
			.width(20)
			.margin(10)
}

2. 添加属性和事件

Button(‘点我’)
	.width(100)
	.height(30)
	.type(ButtonType.Normal) // 按钮类型
	.onClick(() => {
		// 处理点击事件
})

按钮类型:
名称					描述
Capsule			胶囊型按钮(圆角默认认为高度的一半)
Circle			圆形按钮
Normal			普通按钮(默认不带圆角)

Slider 滑动条组件

	silder(options?:SliderOptions)
	Slider({
	min: 0,		// 最小值
	max: 100,	// 最大值
	value: 30,	// 当前值
	step: 10,		// 滑动步长
	style: SliderStyle.OutSet,	
	direction: Axis.Horizontal,	// 水平方向
	reverse: false	// 是否反向滑动
})
.width('90%')
.showTips(true)	// 是否显示value百分比提示
.blockColor('#36D')
.onChange( value => {
	// value 就是当前滑块值
})

页面布局

在这里插入图片描述

属性方法			说明										参数
justifyContent	设置子元素在主轴方向的对齐格式			FlexAlign枚举
alignItems		设置子元素在交叉轴方向的对齐格式			Column容器使用HorizontalAlign枚举

线性布局组件

Column 容器 按列排序

Row 容器 按行排序

在这里插入图片描述

常见布局属性

在这里插入图片描述

@Entry   // 装饰器: 用来装饰类结构,方法,变量  // 标记当前组件是入口组件
@Component // 标记自定义组件
struct Index { // 自定义组件: 可复用的UI单元
  @State message: string = 'Hello World' // 标记一个变量是一个状态变量,一旦变量变了,就会更改
  @State ImageWidth: number = 130
  build() { // UI描述: 其内部以声明方式描述UI构建
    Row() {   // 内置组件:ArkUI提供的组件
      Column() {    // 容器组件:用来完成页面布局,例如Row,Column
        Row() // 里面可以设置 Row({space:20}) 设置space
        {
          Image($r('app.media.mate60'))
            .width(this.ImageWidth)
            .interpolation(ImageInterpolation.High)
        }
        .width('100%')
        .height(400)
        .justifyContent(FlexAlign.Center)
        Row()
        {
          Text($r('app.string.width_label'))
            .fontSize(20)
            .fontWeight(FontWeight.Bold)
          TextInput({text: this.ImageWidth.toFixed(0)})
            .width(150)
            .backgroundColor('#FF')
            .type(InputType.Number)
            .onChange(value => {
              this.ImageWidth = parseInt(value)
            })
        }
        .width('100%')
        .padding({left:14,right:14}) // Row的内边距
        .justifyContent(FlexAlign.SpaceBetween)

        Divider() // 加下划线
          .width('91%')
        Row()
        {
          Button('缩小')
            .width(80)
            .fontSize(20)
            .onClick(() =>{
              if (this.ImageWidth >= 10) {
                this.ImageWidth = this.ImageWidth - 10
              }})
          Button('放大')
            .width(80)
            .fontSize(20)
            .onClick(() => {
              if (this.ImageWidth < 300)
              {
                this.ImageWidth += 10
              }})
        }
        .width('100%')
        .justifyContent(FlexAlign.SpaceEvenly)
        .margin({top:30,bottom:35}) // 外边距

        Row() {
          Slider({
            min: 100,
            max: 300,
            value: this.ImageWidth,
            step: 10
          })
            .width('90%')
            .blockColor('#36D')
            .trackThickness(10)
            .showTips(true)
            .onChange(value => {
              this.ImageWidth = value
            })
        }
      }
      .width('100%')  // 属性方法: 设置组件的UI样式
    }
    .height('100%')
  }
}

渲染控制

ForEach 循环渲染

在这里插入图片描述
在这里插入图片描述

例子:

class Item{
  name: string
  image: ResourceStr
  price: Number

  constructor(name: string, image: ResourceStr, price: Number) {
    this.name = name
    this.image = image
    this.price = price
  }
}

@Entry
@Component
struct ItemPage {
  private items: Array<Item> =[
    new Item('华为mate60',$r('app.media.mate60'),6999),
    new Item('MateBookProX',$r('app.media.MateBookProX'),13999),
    new Item('WatchGT4',$r('app.media.WatchGT4'),1438),
    new Item('FreeBuds Pro3',$r('app.media.FreeBuds'),1499),
    new Item('Mate X5',$r('app.media.mateX5'),12999)
  ]

  build(){
    Column({space: 8}) {
      Row() {
        Text('商品列表')
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
      .margin({ bottom: 20 })


      ForEach(this.items,
        (item: Item) => {
          Row({ space: 10 }) {
            Image(item.image)
              .width(100)
            Column({ space: 4 }) {
              Text(item.name)
                .fontSize(20)
                .fontWeight(FontWeight.Bold)
              Text('¥ ' + item.price)
                .fontColor('#F36')
                .fontSize(18)
            }
            .height('100%')
            .alignItems(HorizontalAlign.Start)
          }
          .width('100%')
          .height('100%')
          .backgroundColor('#FFF')
          .borderRadius(20)
          .height(120)
          .padding(10)
        })
    }
    .width('100%')

  }
}

在这里插入图片描述

在这里插入图片描述

使用if添加折扣信息

class Item{
  name: string
  image: ResourceStr
  price: Number
  discount: Number

  constructor(name: string, image: ResourceStr, price: Number, discount: Number = 0) {
    this.name = name
    this.image = image
    this.price = price
    this.discount = discount
  }
}

@Entry
@Component
struct ItemPage {
  private items: Array<Item> =[
    new Item('华为mate60',$r('app.media.mate60'),6999, 500),
    new Item('MateBookProX',$r('app.media.MateBookProX'),13999),
    new Item('WatchGT4',$r('app.media.WatchGT4'),1438),
    new Item('FreeBuds Pro3',$r('app.media.FreeBuds'),1499),
    new Item('Mate X5',$r('app.media.mateX5'),12999)
  ]

  build(){
    Column({space: 8}) {
      Row() {
        Text('商品列表')
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
      .margin({ bottom: 20 })


      ForEach(this.items,
        (item: Item) => {
          Row({ space: 10 }) {
            Image(item.image)
              .width(100)

            if (item.discount)
            {
              Column({ space: 4 }) {
                Text(item.name)
                  .fontSize(20)
                  .fontWeight(FontWeight.Bold)
                Text('原价: ¥ ' + item.price)
                  .fontColor('#CCC')
                  .fontSize(14)
                  .decoration({type:TextDecorationType.LineThrough})
                // @ts-ignore
                Text('折扣价: ¥ ' + (item.price - item.discount))
                  .fontColor('#F36')
                  .fontSize(14)
                Text('补贴: ¥ ' +  item.discount)
                  .fontColor('#F36')
                  .fontSize(14)
              }
              .height('100%')
              .alignItems(HorizontalAlign.Start)
            } else {
              Column({ space: 4 }) {
                Text(item.name)
                  .fontSize(20)
                  .fontWeight(FontWeight.Bold)
                Text('¥ ' + item.price)
                  .fontColor('#F36')
                  .fontSize(18)
              }
              .height('100%')
              .alignItems(HorizontalAlign.Start)
            }

          }
          .width('100%')
          .height('100%')
          .backgroundColor('#FFF')
          .borderRadius(20)
          .height(120)
          .padding(10)
        })
    }
    .width('100%')

  }
}

在这里插入图片描述

List

列表(List)是一种复杂容器,具有以下特点:
1. 列表项(ListItem)数量过多超过屏幕后,会自动提供滚动功能
2. 列表项(ListItem)既可以纵向排列,也可以横向排列

在这里插入图片描述

List({space: 10}){
	ForEach([1,2,3,4],item =>{
		ListItem(){
			// 列表项内容,只能包含一个根组件
			Text('ListItem')
		}	
	})
}
.width('100%')
.listDirection(Axis.Vertical)		// 列表方向,默认纵向(垂直)

自定义组件

@Component
struct Header{
 private title: ResourceStr
 build()
 {
   Row() {
     Text(this.title)
       .fontSize(30)
       .fontWeight(FontWeight.Bold)
   }
   .width('100%')
   .height(30)
   .margin({ bottom: 20 })

 }
}

这就是自定义组件

全局自定义构建函数

//全局的自定义构建函数
@Builder function ItemCard()
{
	// 函数内容
}

局部的自定义构建函数需要把函数写到@Compont内,不需要写function

自定义公共样式全局/局部都可以

用法直接.fillScreen()

@Styles function fillScreen() // 只能用于公共样式
{
            .width('100%')
            .height('100%')
            .backgroundColor('#FFF')
            .borderRadius(20)
            .height(120)
            .padding(10)

}

有些样式是某些组件特有的需要以下操作
@Extend(Text) function priceText()	 // 需要继承组件
{
	.fontColor('#F36)
	.fontSize(18)
}

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

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

相关文章

云计算:Linux 部署 OVS 集群(控制端)实现OpenFlow

目录 一、实验 1.环境 2.Linux 部署 OVS 集群&#xff08;控制端&#xff09; 3.控制端对接服务端OVS网元 4.服务端OVS添加流表 5.服务端删除OVS 二、问题 1. ODL如何查找已安装插件 2.查看流表显示不全 3.如何删除OVS流表 一、实验 1.环境 (1) 主机 表1 宿主机 主…

kali工具----枚举工具

一、枚举工具 枚举是一类程序&#xff0c;它允许用户从一个网络中收集某一类的所有相关信息。本节将介绍DNS枚举和SNMP枚举技术。DNS枚举可以收集本地所有DNS服务和相关条目。DNS枚举可以帮助用户收集目标组织的关键信息&#xff0c;如用户名、计算机名和IP地址等&#xff0c;…

uniapp 开发小程序如何检测到更新点击重启小程序完成更新?

官方文档&#xff1a;uni.getUpdateManager() | uni-app官网 示例代码&#xff1a; const updateManager uni.getUpdateManager();updateManager.onCheckForUpdate(function (res) {// 请求完新版本信息的回调console.log(res.hasUpdate); });updateManager.onUpdateReady(fu…

HarmonyOS实战开发-视频播放、如何实现了视频播放、暂停、调节倍速、切换视频的功能。

介绍 视频播放的主要工作是将视频数据转码并输出到设备进行播放&#xff0c;同时管理播放任务。本文将对视频播放全流程、视频切换、视频循环播放等场景开发进行介绍说明。 本示例主要展示了播放本地视频和网络视频相关功能,使用 ohos.multimedia.media,ohos.resourceManager,…

股票价格预测 | Python使用GRU预测股票价格

文章目录 效果一览文章概述代码设计效果一览 文章概述 Python使用GRU预测股票价格 代码设计 import pandas as pd import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from numpy

用于大规模数据集(大于1TB)的并行运算的MapReduce是怎么实现的?

MapReduce 是一种编程模型&#xff0c;用于处理和生成大数据集。MapReduce 分为两个阶段&#xff1a;Map 阶段和 Reduce 阶段。 Map 阶段&#xff1a;在这个阶段&#xff0c;输入数据被拆分成不同的数据块&#xff0c;这些数据块被分发到各个 Map 任务上。每个 Map 任务对输入的…

DOTS Instancing合批:如何针对单个渲染实体修改材质参数

最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画&#xff0c;我们是将角色的所有动画数据Baker到一个纹理里面&#xff0c;通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点&#xff0c;材质参数AnimTime记录当前过去的动画时间。但是在做大…

【opencv】示例-inpaint.cpp 图像修复是通过填充损坏图像部分从而修复这些损坏的过程...

原始图像 这段代码展示了一个使用OpenCV库进行图像修复的例子。它首先包含了处理图像编码、解码、显示、处理和照片处理所必要的OpenCV模块的头文件。然后利用cv和std命名空间下的类和方法。通过定义一个鼠标回调函数onMouse来处理图像上的绘图操作&#xff0c;并通过主函数mai…

节省30%成本,宝马使用 NVIDIA Omniverse 构造的数字孪生虚拟汽车工厂,实现降本增效

在数字化转型过程中&#xff0c;汽车制造商宝马集团将工业 AI 的力量运用到整个生产网络&#xff0c;与NVIDIA Omniverse平台共同构建并运行工业元宇宙应用。 宝马集团董事Milan Nedeljković在GTC主题演讲会中&#xff0c;与NVIDIA创始人兼首席执行官黄仁勋共同展示了Omniver…

基于mpc实现无人机轨迹跟踪ROS功能包:mav_control_rw

功能包简介 mav_control_rw 功能包是ETHZ ASL的利用mpc控制实现了旋翼式无人机的轨迹追踪算法。 mpc是模型预测控制的简称&#xff0c;全称是Model-based Predictive Control mpc利用一个已有的模型、系统当前的状态和未来的控制量&#xff0c;来预测系统未来的输出&#xf…

数据中心的网络架构设计,打造高效、安全的数字底座

数据中心的网络架构设计 一、数据中心网络架构设计原则 网络,作为数据中心的核心支柱,其结构精妙,由众多二层接入设备与少量三层设备共同编织而成。过去,数据中心网络规模有限,仅凭数十台设备的简单互连便能实现信息的畅通无阻。然而,随着技术与应用需求的飞速增长,数据…

FFmpeg: 简易ijkplayer播放器实现--05ijkplayer–连接UI界面和ffplay.c

文章目录 ijkplayer时序图消息循环--回调函数实现播放器播放时状态转换播放停止 ijkmediaPlay成员变量成员函数 ijkplayer时序图 stream_open: frame_queue_init packet_queue_init init_clock 创建read_thread线程 创建video_refresh_thread线程 消息循环–回调函数实现 ui …

SpringMVC--02--上下文工具类(RequestContextHolder)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 RequestContextHolder背景1.RequestContextHolder的使用2.request和response怎么和当前请求挂钩?3.request和response等是什么时候设置进去的? 案例应用---用户信…

【C++题解】1027 - 求任意三位数各个数位上数字的和

问题&#xff1a;1027 - 求任意三位数各个数位上数字的和 类型&#xff1a;基础问题 题目描述&#xff1a; 对于一个任意的三位自然数 x &#xff0c;编程计算其各个数位上的数字之和 S 。 输入&#xff1a; 输入一行&#xff0c;只有一个整数 x(100≤x≤999) 。 输出&…

微信小程序 uniapp+vue城市公交线路查询系统dtjl3

小程序Android端运行软件 微信开发者工具/hbuiderx uni-app框架&#xff1a;使用Vue.js开发跨平台应用的前端框架&#xff0c;编写一套代码&#xff0c;可编译到Android、小程序等平台。 前端&#xff1a;HTML5,CSS3 VUE 后端&#xff1a;java(springbootssm)/python(flaskdja…

STM32完成软件I2C通讯

今天的重点是利用STM32的软件方案和MPU60506轴姿态传感器建立通讯&#xff0c;今天只完成了简单的发送地址和接收应答的部分&#xff0c;特此记录一下过程&#xff0c;以后忘记可以随时翻出来看看。 先介绍最基本的I2C通讯的最基本的6个时序&#xff1a; 一&#xff1a;起始条…

goproxy 简单介绍 及一键安装脚本

goproxy 官网 https://goproxy.cn/ GoProxy 是一项用于 Go 模块的高性能代理服务&#xff0c;旨在为 Go 开发人员提供更快速、更可靠的模块下载体验。它提供以下主要功能&#xff1a; 全球分布式代理服务器: GoProxy 在全球多个地区部署了代理服务器&#xff0c;例如拉斯维加…

驱动开发:探索DRIVER_OBJECT驱动对象

本章将探索驱动程序开发的基础部分&#xff0c;了解驱动对象DRIVER_OBJECT结构体的定义&#xff0c;一般来说驱动程序DriverEntry入口处都会存在这样一个驱动对象&#xff0c;该对象内所包含的就是当前所加载驱动自身的一些详细参数&#xff0c;例如驱动大小&#xff0c;驱动标…

B站基于Apache Ranger的大数据权限服务的技术演进

01 背景 随着云计算、大数据技术的日趋成熟&#xff0c;复杂多元、规模庞大的数据所蕴含的经济价值和社会价值逐步凸显&#xff0c;数据安全也是企业面临的巨大挑战&#xff0c;B站一直致力于对用户隐私数据的保护。 02 Ranger概述 2.1 用户认证 提到安全&#xff0c;就不得不…

uni-app web端使用getUserMedia,摄像头拍照

<template><view><video id"video"></video></view> </template> 摄像头显示在video标签上 var opts {audio: false,video: true }navigator.mediaDevices.getUserMedia(opts).then((stream)> {video document.querySelec…