学习ArkTS -- 常用组件使用

学习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,ColumnText(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 = 130build() { // UI描述: 其内部以声明方式描述UI构建Row() {   // 内置组件:ArkUI提供的组件Column() {    // 容器组件:用来完成页面布局,例如Row,ColumnRow() // 里面可以设置 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: stringimage: ResourceStrprice: Numberconstructor(name: string, image: ResourceStr, price: Number) {this.name = namethis.image = imagethis.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: stringimage: ResourceStrprice: Numberdiscount: Numberconstructor(name: string, image: ResourceStr, price: Number, discount: Number = 0) {this.name = namethis.image = imagethis.price = pricethis.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-ignoreText('折扣价: ¥ ' + (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: ResourceStrbuild(){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.rhkb.cn/news/306964.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Testng测试框架(2)-测试用例@Test

测试方法用 Test 进行注释&#xff0c;将类或方法标记为测试的一部分。 Test() public void aFastTest() {System.out.println("Fast test"); }import org.testng.annotations.Test;public class TestExample {Test(description "测试用例1")public void…

Arthas排查工具

简介 | arthas (aliyun.com) 在线安装 #下载jar包 curl -O https://arthas.aliyun.com/arthas-boot.jar#启动会先检测虚拟机进程&#xff0c;如果没有启动失败(idea) java -jar arthas-boot.jar linux安装与window一样 卸载arthas rm -rf ~/.arthas/ rm -rf ~/logs/arthas

Unity TextMeshProUGUI 获取文本尺寸·大小

一般使用ContentSizeFitter组件自动变更大小 API 渲染前 Vector2 GetPreferredValues(string text)Vector2 GetPreferredValues(string text, float width, float height)Vector2 GetPreferredValues(float width, float height) 渲染后 Vector2 GetRenderedValues()Vector…

【Linux】网络基础(一)

文章目录 一、计算机网络背景1. 网络发展2. 认识“协议” 二、网络协议初识1. 协议分层2. OSI七层模型3. TCP/IP五层&#xff08;或四层&#xff09;模型 三、网络传输基本流程1. 同局域网的两台主机通信数据包封装和分用封装分用 2. 跨网络的两台主机通信 四、网络中的地址管理…

Rockchip Android13 Vold(一):Native层

一:概述 Vold全称Volume Daemon是用于管理存储类设备的守护进程,负责接收驱动层设备挂载和卸载消息以及与Framework层之间的通信。Vold作为一个守护进程位于Android的Native Daemons层。 二:Vold框架图 三:Vold Sevice Android13的init.rc位于/system/etc/init/hw/其中使…

C语言 | Leetcode C语言题解之第24题两两交换链表中的节点

题目&#xff1a; 题解&#xff1a; struct ListNode* swapPairs(struct ListNode* head) {struct ListNode dummyHead;dummyHead.next head;struct ListNode* temp &dummyHead;while (temp->next ! NULL && temp->next->next ! NULL) {struct ListNod…

【Linux】编写并运行Shell脚本程序操作实例

关于Shell脚本的介绍&#xff1a; Shell脚本是一种用于自动化任务和简化常见操作的脚本语言&#xff0c;通常用于Linux和Unix环境中。Shell脚本允许用户通过编写一系列命令和逻辑语句来执行一系列任务&#xff0c;从而提高了工作效率和自动化水平。 以下是关于Shell脚本的详细…

PlanUML和Mermaid哪个好?

引言 在当今信息化快速发展的时代&#xff0c;数据可视化和图表工具不仅对于程序员&#xff0c;也对于非技术背景的人士至关重要。绘图工具可以帮助我们更好地理解和表达复杂的概念或数据流。PlantUML和Mermaid是两款被广泛使用的绘图语言&#xff0c;它们都能够通过简洁的文本…

测试用例的编写评审

1、什么叫软件测试用例 什么是测试用例 测试用例(TestCase) 是为项目需求而编制的一组测试输入、执行条件 以及预期结果&#xff0c;以便测试某个程序是否满足客户需求。–测试依据 可以总结为:每一个测试点的数据设计和步骤设计。–测试用例 2、测试用例的重要性(了解) 2.1…

航芯通用MCU技术常见问题 | F4专题

日常工作中&#xff0c;我们的销售或技术工程师经常会收到来自用户的问题&#xff0c;其中一些问题是比较常见的&#xff0c;所以为满足日常用户对航芯产品使用及服务的了解&#xff0c;航芯特此推出“通用MCU技术常见问题”专题&#xff0c;分为F0专题及F4专题&#xff0c;欢迎…

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar]

Missing artifact org.opencv:opencv:jar:4.10.0 [opencv-4.10.0.jar] https://mvnrepository.com/artifact/org.opencv/opencv 根本就没有 找了个旧项目的opencv-410.jar修改下opencv-4.10.0.jar放到目录下面就好了 D:\localRepository\org\opencv\opencv\4.10.0 OpenCV-C…

什么是态势感知?

什么是态势感知&#xff1f; 同学&#xff0c;听说过态势感知吗&#xff1f;啥&#xff1f;不知道&#xff1f;不知道很正常&#xff0c;因为态势感知是一个比较小众、比较神秘的概念。为什么态势感知很神秘&#xff0c;首先是因为这是来自军事情报领域的概念&#xff0c;然后…

python--递归算法篇

1、给定一个包含n1个整数的数组nums&#xff0c;其数字在1到n之间&#xff08;包含1和n&#xff09;&#xff0c; 可知至少存在一个重复的整数&#xff0c;假设只有一个重复的整数&#xff0c;请找出这个重复的数 def repeat(ls:list) -> list:#把个数超过1的数&#xff0c…

使用clickhouse-backup备份和恢复数据

作者&#xff1a;俊达 介绍 clickhouse-backup是altinity提供的一个clickhouse数据库备份和恢复的工具&#xff0c;开源项目地址&#xff1a;https://github.com/Altinity/clickhouse-backup 功能上能满足日常数据库备份恢复的需求&#xff1a; 支持单表/全库备份支持备份上…

【opencv】示例-grabcut.cpp 使用OpenCV库的GrabCut算法进行图像分割

left mouse button - set rectangle SHIFTleft mouse button - set GC_FGD pixels CTRLleft mouse button - set GC_BGD pixels 这段代码是一个使用OpenCV库的GrabCut算法进行图像分割的C程序。它允许用户通过交互式方式选择图像中的一个区域&#xff0c;并利用GrabCut算法尝试…

Tomcat无法成功启动——双击startup.bat闪退的解决办法

一、首先查看端口是否被占用了&#xff0c;一般Tomcat的默认端口是8080&#xff0c;可以在管理员命令行通过“netstat -ano|findstr "8080”"的命令查看当前是否有进程占用了端口。 1.如果端口占用了&#xff1a; 则根据PID&#xff08;进程id号&#xff09;来查这个…

深入理解Apache ZooKeeper与Kafka的协同工作原理

目录 引言 一、ZooKeeper基础概念 &#xff08;一&#xff09;ZooKeeper简介 &#xff08;二&#xff09;ZooKeeper数据结构 &#xff08;三&#xff09;ZooKeeper特点 &#xff08;四&#xff09;应用场景 二、ZooKeeper工作模式 &#xff08;一&#xff09;工作机制 …

jeecg-boot安装

我看大家都挺关注&#xff0c;所以集中上传了下代码和相关工具&#xff0c;方便大家快速完成 链接&#xff1a;https://pan.baidu.com/s/1-Y9yHVZ-4DQFDjPBWUk4-A 提取码&#xff1a;op1r 1. 下载代码 下载地址 : JEECG官方网站 - 基于BPM的低代码开发平台(低代码平台_零代…

Let‘s Encrypt

创建文件夹 mkdir /usr/local/develop/ 安装Certbot客户端 yum install certbot 首先确保example.com和www.example.com这两个域名通过DNS解析绑定了你的web 服务器的公网 IP 就是说先要完成域名解析到服务器 下面命令会验证 /var/www/example 他会将一些命令文件存在…

MySQL 04-EMOJI 表情与 UTF8MB4 的故事

拓展阅读 MySQL View MySQL truncate table 与 delete 清空表的区别和坑 MySQL Ruler mysql 日常开发规范 MySQL datetime timestamp 以及如何自动更新&#xff0c;如何实现范围查询 MySQL 06 mysql 如何实现类似 oracle 的 merge into MySQL 05 MySQL入门教程&#xff0…