ArkUI基础组件
ArkUI
按钮 (Button)
Button是按钮组件,通常用于响应用户的点击操作,其类型包括胶囊按钮、圆形 按钮、普通按钮。Button做为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮。具体用法请参考Button。
创建按钮
Button通过调用接口来创建,接口调用有以下两种形式:
- 创建不包含子组件的按钮。
Button(label?: ResourceStr, options?: { type?: ButtonType, stateEffect?: boolean })
其中,label用来设置按钮文字,type用于设置Button类型,stateEffect属性设置Button是否开启点击效果。
Button('Ok', { type: ButtonType.Normal, stateEffect: true })
.borderRadius(8)
.backgroundColor(0x317aff)
.width(90)
.height(40)
- 创建包含子组件的按钮。
Button(options?: {type?: ButtonType, stateEffect?: boolean})
Button({ type: ButtonType.Normal, stateEffect: true }) {
Row() {
Image($r('app.media.loading')).width(20).height(40).margin({ left: 12 })
Text('loading').fontSize(12).fontColor(0xffffff).margin({ left: 5, right: 12 })
}.alignItems(VerticalAlign.Center)
}.borderRadius(8).backgroundColor(0x317aff).width(90).height(40)
设置按钮类型
Button有三种可选类型,分别为胶囊类型(Capsule)、圆形按钮(Circle)和普通按钮(Normal),通过type进行设置。
- 胶囊按钮(默认类型)
此类型按钮的圆角自动设置为高度的一半,不支持通过borderRadius属性重新设置圆角。
Button('Disable', { type: ButtonType.Capsule, stateEffect: false })
.backgroundColor(0x317aff)
.width(90)
.height(40)
- 圆形按钮
此类型按钮为圆形,不支持通过borderRadius属性重新设置圆角。
Button('Circle', { type: ButtonType.Circle, stateEffect: false })
.backgroundColor(0x317aff)
.width(90)
.height(90)
- 普通按钮
此类型的按钮默认圆角为0,支持通过borderRadius属性重新设置圆角。
Button('Ok', { type: ButtonType.Normal, stateEffect: true })
.borderRadius(8)
.backgroundColor(0x317aff)
.width(90)
.height(40)
样式和事件
- 调用系统属性方法设置样式、也可以定义自定义属性方法。
- 正常绑定事件实现功能
Text文本组件
Text是文本组件,通常用于展示用户视图,如显示文章的文字。具体用法请参考Text。
创建文本
Text可通过以下两种方式来创建:
string字符串
Text('我以江月敬浮生')
-
引用
Resource资源资源引用类型可以通过
$r创建Resource类型对象,文件位置为/resources/base/element/string.json。
Text($r('app.string.module_desc'))
.baselineOffset(0)
.fontSize(30)
.border({ width: 1 })
.padding(10)
.width(300)
添加子组件
Span只能作为Text和RichEditor组件的子组件显示文本内容。可以在一个Text内添加多个Span来显示一段信息,例如产品说明书、承诺书等。
- 创建
Span。
Span组件需要写到Text组件内,单独写Span组件不会显示信息,Text与Span同时配置文本内容时,Span内容覆盖Text内容。
Text('我以江月敬浮生') {
Span('郁江孤影憾不平')
}
.padding(10)
.borderWidth(1)
常见属性方法
-
通过
decoration设置文本装饰线及颜色。 -
通过
textCase设置文字一直保持大写或者小写状态。 -
通过
textAlign属性设置文本对齐样式 -
通过
textAlign属性设置文本对齐样式。 -
通过
textOverflow属性控制文本超长处理,textOverflow需配合maxLines一起使用(默认情况下文本自动折行)。-
textOverflow({ overflow: TextOverflow.None }) -
textOverflow({ overflow: TextOverflow.Ellipsis }) -
textOverflow({ overflow: TextOverflow.MARQUEE })
-
-
通过
lineHeight属性设置文本行高。 -
通过
baselineOffset属性设置文本基线的偏移量。 -
通过
letterSpacing属性设置文本字符间距。 -
通过
minFontSize与maxFontSize自适应字体大小,minFontSize设置文本最小显示字号,maxFontSize设置文本最大显示字号,minFontSize与maxFontSize必须搭配同时使用,以及需配合maxline或布局大小限制一起使用,单独设置不生效。 -
通过
copyOption属性设置文本是否可复制粘贴。
事件
Text组件可以添加通用事件,可以绑定onClick、onTouch等事件来响应操作。
由于Span组件无尺寸信息,事件仅支持添加点击事件onClick。
显示图片 (Image)
开发者经常需要在应用中显示一些图片,例如:按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和``gif,具体用法请参考Image组件。
Image通过调用接口来创建,接口调用形式如下:
Image(src: PixelMap | ResourceStr | DrawableDescriptor)
该接口通过图片数据源获取图片,支持本地图片和网络图片的渲染展示。其中,src是图片的数据源,加载方式请参考加载图片资源。
加载图片资源
Image支持加载存档图、多媒体像素图两种类型。
存档图类型数据源
存档图类型的数据源可以分为本地资源、网络资源、Resource资源、媒体库资源和base64。
-
本地资源
创建文件夹,将本地图片放入ets文件夹下的任意位置。
Image组件引入本地图片路径,即可显示图片(根目录为ets文件夹)。Image('images/view.jpg').width(200) -
网络资源
引入网络图片需申请权限
ohos.permission.INTERNET,具体申请方式请参考声明权限。此时,Image组件的src参数为网络图片的链接。Image组件首次加载网络图片时,需要请求网络资源,非首次加载时,默认从缓存中直接读取图片,更多图片缓存设置请参考setImageCacheCount、setImageRawDataCacheSize、setImageFileCacheSize。如果是预览器,未申请网络权限时,也可以打开
Image('https://foruda.gitee.com/avatar/1680571445959229147/9556293_mayuanwei_1680571445.png') -
Resource资源 : 使用资源格式可以跨包/跨模块引入图片,resources文件夹下的图片都可以通过$r资源接口读 取到并转换到Resource格式。图1
resources

Image($r('app.media.icon'))
图2 rawfile : 还可以将图片放在rawfile文件夹下。

Image($rawfile('example1.png'))
- 媒体库
file://data/storage
支持file://路径前缀的字符串,用于访问通过媒体库提供的图片路径。从媒体库获取的url格式通常如下。
Image('file://media/Photos/5')
.width(200)
-
base64
路径格式为
data:image/[png|jpeg|bmp|webp];base64,[base64 data],其中[base64 data]为Base64字符串数据。Base64格式字符串可用于存储图片的像素数据,在网页上使用较为广泛。
多媒体像素图
PixelMap是图片解码后的像素图,具体用法请参考图片开发指导。以下示例将加载的网络图片返回的数据解码成PixelMap格式,再显示在Image组件上,
显示矢量图
Image组件可显示矢量图(svg格式的图片),支持的svg标签为:svg、rect、circle、ellipse、path、line、polyline、polygon和animate。
svg格式的图片可以使用fillColor属性改变图片的绘制颜色。
Image($r('app.media.cloud'))
.width(50)
.fillColor(Color.Blue)
属性
-
设置图片缩放类型:通过
objectFit属性使图片缩放到高度和宽度确定的框内。 -
图片插值:当原图分辨率较低并且放大显示时,图片会模糊出现锯齿。这时可以使用
interpolation属性对图片进行插值,使图片显示得更清晰。 -
设置图片重复样式:通过
objectRepeat属性设置图片的重复样式方式,重复样式请参考ImageRepeat枚举说明。 -
设置图片渲染模式:通过
renderMode属性设置图片的渲染模式为原色或黑白。 -
设置图片解码尺寸:通过
sourceSize属性设置图片解码尺寸,降低图片的分辨率。 -
为图片添加滤镜效果:通过
colorFilter修改图片的像素颜色,为图片添加滤镜。 -
同步加载图片:一般情况下,图片加载流程会异步进行,以避免阻塞主线程,影响UI交互。但是特定情 况下,图片刷新时会出现闪烁,这时可以使用
syncLoad属性,使图片同步加载,从而避免出现闪烁。不建议图片加载较长时间时使用,会导致页面无法响应。Image($r('app.media.icon'))
.syncLoad(true)
事件调用
通过在Image组件上绑定onComplete事件,图片加载成功后可以获取图片的必要信息。如果图片加载失败,也可以通过绑定onError回调来获得结果。
也可以绑定通用事件,如点击、触摸等
文本输入 (TextInput/TextArea)
TextInput、TextArea是输入框组件,通常用于响应用户的输入操作,比如评论区的输入、聊天框的输入、表格的输入等,也可以结合其它组件构建功能页面,例如登录注册页面。具体用法请参考TextInput、TextArea。
创建输入框
TextInput为单行输入框、TextArea为多行输入框。通过以下接口来创建。
TextInput(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextInputController})
TextArea(value?:{placeholder?: ResourceStr, text?: ResourceStr, controller?: TextAreaController})
- 单行输入框
TextInput()
-
多行输入框
多行输入框文字超出一行时会自动折行。
TextArea()
设置输入框类型
TextInput有9种可选类型,通过type属性进行设置:
Normal基本输入模式Password密码输入模式Email邮箱地址输入模式Number纯数字输入模式PhoneNumber电话号码输入模式USER_NAME用户名输入模式NEW_PASSWORD新密码输入模式NUMBER_PASSWORD纯数字密码输入模式NUMBER_DECIMAL带小数点的数字输入模式。
例如:
TextInput()
.type(InputType.Password)
样式
-
placeholder设置无输入时的提示文本。text设置输入框当前的文本内容。如果同时设置,则显示
text内容TextInput({placeholder:'我是提示文本',text:'我是当前文本内容'}) -
通用属性方法:
尺寸、背景色等
事件
文本框主要用于获取用户输入的信息,把信息处理成数据进行上传,绑定onChange事件可以获取输入框内改变的内容。用户也可以使用通用事件来进行相应的交互操作。
TextInput()
.onChange((value: string) => {
console.info(value);
})
.onFocus(() => {
console.info('获取焦点');
})