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('获取焦点');
})