当前位置: 首页 > news >正文

【Harmony OS】组件

目录

组件概述

组件常用属性

系统内置组件

Text

TextArea 多行文本输入框组件

TextInput 文本输入框

Button

Image 图片组件,支持本地图片和网络图片

Radio 单选框

Checkbox 复选框

Blank 空白填充组件

 Divider 分隔符

PatternLock 图案密码锁组件

Progress 进度条组件

QRCode 二维码组件

 Rating 评分组件

RichText 富文本组件

Search 搜索框组件

Select 下拉选择菜单

Slider 滑动条组件

Stepper与StepperItem 步骤导航器组件

TextClock  当前系统时间显示,支持不同时区的时间显示,最高精确到秒级

TextTimer 计时器组件

Toggle 组件提供复选框样式、状态按钮样式及开关样式

DataPanel 数据面板,主要支持两类数据面板

Gauge 数据量规图表

ImageAnimator 动画组件,来实现逐帧播放图片

Marquee 跑马灯组件

系统图表库


组件概述

组件需要放置到组件容器中

组件容器也称为布局

基于ArkTS的HarmonyOS应用开发中,系统提供了丰富的 组件 ,如Text、TextArea、Button、Image、Slider等
系统也提供了很多 容器组件 ,如Row、Column、Flex、Navigator、List、Tabs等
尽管这里把组件分为容器组件和普通组件,但实际上有的普通组件也是可以容纳其它的组件,因此容器组件和普通组件实际上没有明确的界限, 都是组件
在应用界面中,实例化组件的一般语法为:
组件名([参数]){
//参数视组件而定,是可选的
//子组件,如果没有子组件,此部分和花括号都可以省略
}.链式调用组件属性方法( ) //组件属性方法一般也有参数
Row() {
Image($r('app.media.loading')) 
.width(20).height(20).margin({ left: 12 })
Text('加载中...')
.fontSize(12).fontColor(0xFFFFFF)
}.alignItems( VerticalAlign.Center )

@Entry // 入口组件装饰器
@Component // 组件装饰器
struct Index { // 定义组件
build() { // 生成器函数
Column() { // 列容器组件
Image($r('app.media.icon')) // 图片组件
.height(100).width(100) // 设置高、宽属性
.margin({ top: 150 }) // 设置边距
TextInput().width("80%").height(50).margin(10) // 输入框组件
TextInput().width("80%").height(50).margin(10)
.type(InputType.Password)
Button(" 登录 ") // 按钮组件
.width("60%")
.height(50)
.margin(20)
}.height("100%") // 设置 Column 的高度
.width("100%") // 设置 Column 的宽度
}
}

组件常用属性

组件属性可以分为 通用属性 自定义属性
通用属性 包括 尺寸、位置、背景、文本样式 等等
尺寸是用来设置组件大小的,如宽、高等。一般组件都具有的尺寸属性及说明如表
名称
说明
取值举例
width
宽度,缺省时使用元素自身内容需要的宽度,值为Length类型
Button("您好").width(100) .height(50)
height
高度,缺省时使用元素自身内容需要的高度,值为Length类型
Button("您好").width('100%'). height('30px')
size
大小,可以同时设置宽高,值为JSON对象,内部包含宽度和高度,宽高类型为Length类型
{width?:Length,height?:Length}
padding
内边距,可以同时设置四个方向内边距,也可设置指定方向的内边距,设置四个方向时,采用JSON对象参数,内包含四个方向的值都是Length类型,当设置一个值时表示同时设置四个方向内边距一致
{top?:Length,right?:Length,bottom ?:Length,left?:Length}或 Length
margin
外边距,方式同上
同上
constraintSize
设置约束尺寸,对组件布局进行尺寸范围限制,包括宽度和高度的最小值和最大值
{minWidth?:Length,maxWidth?:Length,minHeight?:Length,maxHeig
ht?:Length}
layoutWeight
组件在布局中的大小权重,在容器尺寸确定时,元素与兄弟结点主轴布局尺寸按照权重进行分配,默认自适应占满剩余空间。该属性仅在Row/Column/Flex有
值为number类型数值

在描述尺寸时一般会用到 Length 类型值,Length类型是系统定义的类型,它可以是字符串(string)、数值(number)和资源(Resource)。
在使用字符串(string)表示文字大小时,可以显式指定像素单位,如'30px'、'30vp'等,也可设置百分比字符串,如'80%'。
在使用数值(number)表示尺寸大小时,可以直接使用数值,其默认单位是vp,如30。
资源(Resource)是使用引入资源的方式,使用系统资源或者应用资源中的尺寸。

位置属性 顾名思义是设置组件的位置关系的,如居中、坐标、偏移量等。
一般组件都具有的位置属性及说明如表
名称
说明
取值举例
align
组件内容的对齐方式,只有当设置的宽、高超过元素内
容大小时才有效,值为类型
Text('您好')
.size({width:100,height:100 })
.align(Alignment.End) 另外,
Alignment还有Top、TopStart、Start
、Center、Buttom等枚举值
direction
设置元素水平方向的布局, 可选值为Direction枚举类
有三个枚举值Ltr表示元素从左到右布局
Rtl表示元素从右到左布局Auto表示系
统默认布局方向
position
位置,表示组件在父容器中的位置。默认以组件的左上
角为基准
{x:Length,y:Length}
markAnchor
组件位置定位时的锚点,以元素顶部起点作为基准点进 行偏移
{x:Length,y:Length}默认值是(0,0)
offset
相对布局完成位置坐标偏移量,设置该属性,不影响父 容器布局,仅在绘制时进行位置调整。
{x:Length,y:Length}默认值是(0,0)

文本样式 主要是设置组件内显示的文本的颜色、大小、字体等,关于文本设置的主要属性如表
名称
说明
取值举例
fontColor
文本颜色,值为Color类型,可以直接用颜色值,也可以采用系统中的颜色
Text('您好')
.size({width:100,height:100 })
.fontColor(0xFF0000)
fontSize
字体大小,值为Length类型,当为数值时默认单位为fp
Text('您好')
.size({width:100,height:100 })
.fontSize(30)
fontStyle
字体样式,值为类型
Text('您好')
.fontStyle(FontStyle.Normal)
fontWeight
字体粗细,值为number或FontWeight 以取100~900 枚举类型,数值可 中的整百数值, 默认为400 ,值越大字越粗,FontWeight提供了枚举类型
Text(this.message).fontSize(50)
.fontWeight(FontWeight.Bold)
fontFamily
字体,值为字符串类型。可以设置一种字体,也可以设置多
种候选字体,以‘,’分割,按顺序选择显示的字体
Text(this.message).fontSize(50)
.fontFamily(‘Arial,sans-serif’)

其它属性
属性都可以通过链式调用方式设置
关于组件属性的分类说明如表
名称
主要用途说明
显示样式方面
组件的大小、位置、背景、透明度、边框、颜色渐变等
布局约束方面
宽高比、显示优先级、Flex约束、栅格间距等
显示控制方面
显示隐藏控制、禁用控制、增加浮层、Z序控制(层控制)等
图形图像处理方面
图形变换(旋转、平移、缩放、矩阵变换),图像效果(模糊 、阴影、灰度、高光、饱和度、对比度、反转、颜色叠加、色相旋转、裁剪、遮盖等)

系统内置组件

Text

显示文本的组件,可以包含Span子组件
textAlign :设置文本在水平方向的对齐方式
textOverflow :设置文本超长时的显示方式,默认值 TextOverflow.Clip
maxLines :设置文本的最大行数,默认值是 Infinity
lineHeight :设置文本的行高,设置值不大于 0 时,不限制文本行高,自适应字体大小,Length number 类型时单位为 fp
decoration :设置文本装饰线样式及其颜色
letterSpacing :设置文本字符间距
minFontSize :设置文本最小显示字号,需要配合 maxFontSize
maxline 或布局大小限制使用,单独设置不生效
maxFontSize :设置文本最大显示字号,需要配合 minFontSize
maxline 或布局大小限制使用,单独设置不生效
textCase :设置文本大小写,默认值是 TextCase.Normal
copyOption :支持设置文本可复制、粘贴,默认值 CopyOptions.None

TextArea 多行文本输入框组件

TextArea是多行文本输入框组件,当输入的文本内容超过组件宽度时会自动换行显示:
placeholderColor :设置 placeholder 文本颜色。
placeholderFont :设置 placeholder 文本样式。
textAlign :设置文本在输入框中的水平对齐式。
caretColor :设置输入框光标颜色。
inputFilter :通过正则表达式设置输入过滤器。匹配表达式的输入允许显示,不匹配的输入将被过滤。仅支持单个字符匹配,不支持字符串匹配。
copyOption :设置输入的文本是否可复制。
TextArea({
//设置无输入时的提示文本
placeholder: '寒雨连江夜入吴,\n平明送客楚山
孤。\n洛阳亲友如相问,\n一片冰心在玉壶。'
})
.placeholderFont({ size: 24, weight: 400 })
.width(330)
.margin(20)
.fontSize(16)
.fontColor('#182431')
.maxLines(10)
.backgroundColor('#F5F5F5')

TextInput 文本输入框

密码输入框
TextInput({ placeholder: '请输入密码...' })
.fontSize(24)
.type(InputType.Password) //密码类型
.maxLength(16) //最大输入字符数
.showPasswordIcon(true) 
//输入框末尾的图标显示
文本输入框:
type :设置输入框类型,默认值是 InputType.Normal ,密码框为InputType.Password
placeholderColor :设置 placeholder 文本颜色
placeholderFont :设置 placeholder 文本样式
caretColor :设置输入框光标颜色
maxLength :设置文本的最大输入字符数
showPasswordIcon(true) :输入框末尾的图标显示

Button

Button('默认')
Button('普通型',
{ type: ButtonType.Normal}).width(90)
Button('胶囊型',
{ type: ButtonType.Capsule }).width(90)
Button('圆型',
{ type: ButtonType.Circle}).width(90)
Button('自定义弧度',{ type: ButtonType.Normal, 
stateEffect: true })
.borderRadius(10).width(90)
Button({type: ButtonType.Capsule, stateEffect: true }) {
Row(){
LoadingProgress().width(28).height(28)
.margin({ left: 12 }).color(0xFFFFFF)
Text('06').fontSize(20).fontColor(0xFFFFFF)
.margin({ left: 5, right: 12 })
}.alignItems(VerticalAlign.Center)
.width(90).height(40)
}

Image 图片组件,支持本地图片和网络图片

//从media中加载
Image($r('app.media.icon1'))
//从rawfile中加载
Image($rawfile('icon2.png'))
//从网络加载
Image('https://www.xiyou.edu.cn/_mediaf
ile/xupt/2017/10/16/3lwtsqiafs.jpg')

Radio 单选框

单选框,同group的Radio只能选中一个
Row({ space: 5 }) {
Radio({ value: 'Radio1', group: 'radioGroup' })
.checked(true)//默认不选中
.height(35)
.width(35)
.radioStyle({
checkedBackgroundColor: Color.Orange
})
.onChange((isChecked: boolean) => {
promptAction.showToast({ message: '选项1
被选中了', duration: 1000 })
})
Text('选项1').fontSize(25)
}

Checkbox 复选框

复选框:
Row() {
CheckboxGroup({ group: 'checkboxGroup' })
Text('全选').fontSize(20)
}
Row() {
Checkbox({ name: 'checkbox1', group: ' checkboxGroup' })
.select(true) //设置默认选中
.selectedColor(0xed6f21) //选中颜色
.onChange((value: boolean) => {
//设置选中事件
console.info('Checkbox1 change is ' + value)
})
Text('可乐').fontSize(20)
}
Row() {
Checkbox({ name: 'checkbox2', group: ' checkboxGroup' })
.select(false)
.selectedColor(0x39a2db)
.onChange((value: boolean) => {
console.info('Checkbox2 change is ' + value)
})
Text('鸡翅').fontSize(20)
}

Blank 空白填充组件

Blank是空白填充组件,在容器主轴方向上,空白填充组件具有自动填充容器空余部分的能力
Blank组件仅当其父组件为Row/Column ,且父组件设置了宽度才生效
//Blank父组件Row未设置宽度时,子组件间无空白填充
Row() {
Text('Left Space').fontSize(24)
Blank()
Text('Right Space').fontSize(24)
}
//Blank父组件Row设置了宽度时,子组件间以空白填充
Row() {
Text('Left Space').fontSize(24)
Blank()
Text('Right Space').fontSize(24)
}.width('100%')

Blank支持color属性,用来设置空白填充的填充颜色。
Row() {
Text('Left Space').fontSize(24)
//设置空白填充的填充颜色
Blank().color(Color.Yellow)
Text('Right Space').fontSize(24)
}.width('100%')

 Divider 分隔符

Divider()
.strokeWidth(15)//宽度
.color(0x2788D9)//颜色
.vertical(true) //竖线

PatternLock 图案密码锁组件

PatternLock()
.sideLength(200) //设置组件的宽度和高度(宽高相同)
.circleRadius(9) //设置宫格中圆点的半径
.pathStrokeWidth(18)//设置连线的宽度。设置为0或负数等非法值时连线不
显示
.activeColor('#B0C4DE') //设置宫格圆点在“激活”状态的填充颜色
.selectedColor('#228B22') //设置宫格圆点在“选中”状态的填充颜色
.pathColor('#90EE90') //设置连线的颜色
.backgroundColor('#F5F5F5') //背景颜色
.autoReset(true) //设置在完成密码输入后,再次在组件区域按下时是否重
置组件状态
.onPatternComplete((selectedSerial: Array<number>) => {
console.log(selectedSerial.toString());
})

Progress 进度条组件

Progress({ value: 20, total: 100, type: ProgressType.Linear })
.width("70%")
Progress({ value: 20, total: 100, type: ProgressType.Ring })
.color(Color.Orange).style({ strokeWidth: 8 })
Progress({ value: 20, total: 100, type: ProgressType.Eclipse })
.width(50)
Progress({ value: 20, total: 100, type: ProgressType.ScaleRing })
.backgroundColor(Color.Green).color(Color.Red)
.style({ strokeWidth: 15, scaleCount: 20, scaleWidth: 3 })
Progress({ value: 10, total: 100, type: ProgressType.Capsule })
.width(100).height(20)
Progress({ value: 20, total: 100, type: ProgressType.Capsule })
.width(100).height(20).color(Color.Green)
Progress({ value: 30, total: 100, type: ProgressType.Capsule })
.width(10).height(60).backgroundColor(Color.Orange)

QRCode 二维码组件

 Rating 评分组件

RichText 富文本组件

Search 搜索框组件

Select 下拉选择菜单

Slider 滑动条组件

Stepper与StepperItem 步骤导航器组件

TextClock  当前系统时间显示,支持不同时区的时间显示,最高精确到秒级

TextTimer 计时器组件

Toggle 组件提供复选框样式、状态按钮样式及开关样式

DataPanel 数据面板,主要支持两类数据面板

 

Gauge 数据量规图表

ImageAnimator 动画组件,来实现逐帧播放图片

Marquee 跑马灯组件

系统图表库

系统图标库:
https://developer.huawei.com/consumer/cn/design/harmonyos-symbol/
使用说明:
https://gitee.com/openharmony/docs/blob/master/
zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-symbolSpan.md#attributemodifier12

相关文章:

  • 从零开始学Python游戏编程39-碰撞处理1
  • ESP-ADF esp_dispatcher组件之dispatcher介绍
  • RK3288 5.10内核无法点亮LVDS显示
  • Chrmo手动同步数据
  • 【软件工程】TCP三次握手中的SYN与ACK:核心机制详解
  • Vue3 上传后的文件智能预览(实战体会)
  • 如何申请游戏支付平台通道接口?
  • (六)机器学习---聚类与K-means
  • Python CT图像预处理——基于ITK-SNAP
  • 【DRAM存储器五十一】LPDDR5介绍--DFE与Pre-Emphasis
  • ⭐Unity_Demolition Media Hap (播放Hap格式视频 超16K大分辨率视频 流畅播放以及帧同步解决方案)
  • Spring-Cache替换Keys为Scan—负优化?
  • HTMLCSS模板实现水滴动画效果
  • 再谈String
  • Python的库
  • 【25软考网工】第三章(4)生成树协议、广播风暴和MAC地址表震荡
  • MySQL表达式之公用表表达式(CTE)的使用示例
  • Windows与CasaOS跨平台文件同步:SyncThing本地部署与同步配置流程
  • springboot2.x升级到3.x 惨痛经验总结
  • 告别 “幻觉” 回答:RAG 中知识库与生成模型的 7 种对齐策略
  • 往事|学者罗继祖王贵忱仅有的一次相见及往来函札
  • 东部战区新闻发言人就美“劳伦斯”号导弹驱逐舰过航台湾海峡发表谈话
  • 爱奇艺要转型做微剧?龚宇:是误解,微剧是增量业务,要提高投资回报效益
  • 生态环境部:我国核电规模全球第一,总体安全可控
  • 最大涨幅9800%!金价新高不断,引发期权“末日轮”效应,沪金期权多张合约大涨
  • IMF将今年美国经济增长预期下调0.9个百分点至1.8%