组件
组件(Component)是界面搭建与显示的最小单位,我们可以使用组件轻松的编写出丰富、漂亮的界面。
组件根据功能可以分为以下五大类:基础组件、容器组件、媒体组件、绘制组件、画布组件。其中基础组件是视图层的基本组成单元,包括Text、Image、TextInput、Button、LoadingProgress。
TEXT组件
Text组件用于在界面上展示一段文本信息,可以包含子组件Span。
文本样式
针对包含文本元素的组件,例如Text、Span、Button、TextInput等,可使用fontColor、fontSize、fontStyle、 fontWeight、fontFamily这些文本样式,分别设置文本的颜色、大小、样式、粗细以及字体,文本样式的属性如下表:
名称 | 参数类型 | 描述 |
fontColor | ResourceColor | 设置文本颜色。 |
fontSize | Length | Resource | 设置文本尺寸,Length为number类型时,使用fp单位。 |
fontStyle | FontStyle | 设置文本的字体样式。默认值:FontStyle.Normal。 |
fontWeight | number | FontWeight | string | 设置文本的字体粗细,number类型取值[100, 900],取值间隔为100,默认为400,取值越大,字体越粗。string类型仅支持number类型取值的字符串形式,例如“400”,以及“bold”、“bolder”、“lighter”、“regular”、“medium”,分别对应FontWeight中相应的枚举值。默认值:FontWeight.Normal。 |
fontFamily | string | Resource | 设置文本的字体列表。使用多个字体,使用“,”进行分割,优先级按顺序生效。例如:“Arial,sans-serif”。 |
除了通用属性和文本样式设置,下面列举了一些Text组件的常用属性的使用。
设置文本对齐方式
使用textAlign属性可以设置文本的对齐方式,示例代码如下:
Text('HarmonyOS')
.width(200)
.textAlign(TextAlign.Start)
.backgroundColor(0xE6F2FD)
textAlign参数类型为TextAlign,定义了以下几种类型:
Start(默认值):水平对齐首部。
![](https://img-blog.csdnimg.cn/img_convert/66a8837860ab208e9f40687b531f16b5.png)
Center:水平居中对齐。
![](https://img-blog.csdnimg.cn/img_convert/a80d74ee031daf39af5c21fe53e6bea3.png)
End:水平对齐尾部。
![](https://img-blog.csdnimg.cn/img_convert/914ad40e6455ab3f58df2fb5569de68f.png)
设置文本超长显示
当文本内容较多超出了Text组件范围的时候,您可以使用textOverflow设置文本截取方式,需配合maxLines使用,单独设置不生效,maxLines用于设置文本显示最大行数。下面的示例代码将textOverflow设置为Ellipsis ,它将显示不下的文本用 “...” 表示:
设置文本装饰线
使用decoration设置文本装饰线样式及其颜色,大家在浏览网页的时候经常可以看到装饰线,例如带有下划线超链接文本。decoration包含type和color两个参数,其中type用于设置装饰线样式,参数类型为TextDecorationTyp,color为可选参数。
Image组件
Image组件用来渲染展示图片,它可以让界面变得更加丰富多彩。只需要给Image组件设置图片地址、宽和高,图片就能加载出来。
ImageFit包含以下几种类型:
Contain:保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。
Cover(默认值):保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。
Auto:自适应显示。
Fill:不保持宽高比进行放大缩小,使得图片充满显示边界。
ScaleDown:保持宽高比显示,图片缩小或者保持不变。
None:保持原有尺寸显示。
加载网络图片
比如浏览新闻的时候,图片一般从网络加载而来,Image组件支持加载网络图片,将图片地址换成网络图片地址进行加载。
Image('https://www.example.com/xxx.png')
为了成功加载网络图片,您需要在module.json5文件中申明网络访问权限。
{
"module" : {
"requestPermissions":[
{
"name": "ohos.permission.INTERNET"
}
]
}
}
TextInput组件
设置输入提示文本
设置输入类型
type的参数类型为InputType,包含以下几种输入类型:
Normal:基本输入模式。支持输入数字、字母、下划线、空格、特殊字符。
Password:密码输入模式。
Email:e-mail地址输入模式。
Number:纯数字输入模式。
设置光标位置
可以使用TextInputController动态设置光位置,下面的示例代码使用TextInputController的caretPosition方法,将光标移动到了第二个字符后。
获取输入文本
我们可以给TextInput设置onChange事件,输入文本发生变化时触发回调,下面示例代码中的value为实时获取用户输入的文本信息。
Button组件
Button组件主要用来响应点击操作,可以包含子组件。下面的示例代码实现了一个“登录按钮”:
Button('登录', { type: ButtonType.Capsule, stateEffect: true })
.width('90%')
.height(40)
.fontSize(16)
.fontWeight(FontWeight.Medium)
.backgroundColor('#007DFF')
效果图如下:
![](https://img-blog.csdnimg.cn/img_convert/c82c0dd1e4a339bc18a03a8b67b304f7.png)
设置按钮样式
type用于定义按钮样式,示例代码中ButtonType.Capsule表示胶囊形按钮;stateEffect用于设置按钮按下时是否开启切换效果,当状态置为false时,点击效果关闭,默认值为true。
我们可以设置多种样式的Button,除了Capsule可以以设置Normal和Circle:
Capsule:胶囊型按钮(圆角默认为高度的一半)。
![](https://img-blog.csdnimg.cn/img_convert/e4c2c872f7b1d68b0d6c86e4affa7fa0.png)
Circle:圆形按钮。
![](https://img-blog.csdnimg.cn/img_convert/9544a0e6401b07a2a6c5ff2658219222.png)
Normal:普通按钮(默认不带圆角)。
![](https://img-blog.csdnimg.cn/img_convert/e2648e85a1ef2d839d729c8926f61372.png)
设置按钮点击事件
可以给Button绑定onClick事件,每当用户点击Button的时候,就会回调执行onClick方法,调用里面的逻辑代码。
Button('登录', { type: ButtonType.Capsule, stateEffect: true })
...
.onClick(() => {
// 处理点击事件逻辑
})
包含子组件
Button组件可以包含子组件,让您可以开发出更丰富多样的Button,下面的示例代码中Button组件包含了一个Image组件:
Button({ type: ButtonType.Circle, stateEffect: true }) {
Image($r('app.media.icon_delete'))
.width(30)
.height(30)
}
.width(55)
.height(55)
.backgroundColor(0x317aff)
效果图如下:
![](https://img-blog.csdnimg.cn/img_convert/950699a168cc53d2ce7ff0443c9dcd85.png)
LoadingProgress组件
LoadingProgress组件用于显示加载进展,比如应用的登录界面,当我们点击登录的时候,显示的“正在登录”的进度条状态。LoadingProgress的使用非常简单,只需要设置颜色和宽高就可以了。
LoadingProgress()
.color(Color.Blue)
.height(60)
.width(60)
效果图如下:
![](https://img-blog.csdnimg.cn/img_convert/4126cff6465040b7d27ae5a7a63173f7.gif)
Column&Row组件的使用
布局容器概念
线性布局容器表示按照垂直方向或者水平方向排列子组件的容器,ArkTS提供了Column和Row容器来实现线性布局。
Column表示沿垂直方向布局的容器。
Row表示沿水平方向布局的容器。
主轴和交叉轴概念
在布局容器中,默认存在两根轴,分别是主轴和交叉轴,这两个轴始终是相互垂直的。不同的容器中主轴的方向不一样的。
主轴:在Column容器中的子组件是按照从上到下的垂直方向布局的,其主轴的方向是垂直方向;在Row容器中的组件是按照从左到右的水平方向布局的,其主轴的方向是水平方向。
交叉轴:与主轴垂直相交的轴线,如果主轴是垂直方向,则交叉轴就是水平方向;如果主轴是水平方向,则交叉轴是垂直方向。
属性介绍
了解布局容器的主轴和交叉轴,主要是为了让大家更好地理解子组件在主轴和交叉轴的排列方式。
接下来,我们将详细讲解Column和Row容器的两个属性justifyContent和alignItems。
属性名称 | 描述 |
justifyContent | 设置子组件在主轴方向上的对齐格式。 |
alignItems | 设置子组件在交叉轴方向上的对齐格式。 |
1. 主轴方向的对齐(justifyContent)
子组件在主轴方向上的对齐使用justifyContent属性来设置,其参数类型是FlexAlign。FlexAlign定义了以下几种类型:
Start:元素在主轴方向首端对齐,第一个元素与行首对齐,同时后续的元素与前一个对齐。
![](https://img-blog.csdnimg.cn/img_convert/9ea0d476036b79370b7cb26daa240da1.png)
Center:元素在主轴方向中心对齐,第一个元素与行首的距离以及最后一个元素与行尾距离相同。
![](https://img-blog.csdnimg.cn/img_convert/76a7da21b7c65bc0205e80cbc0d13484.png)
End:元素在主轴方向尾部对齐,最后一个元素与行尾对齐,其他元素与后一个对齐。
![](https://img-blog.csdnimg.cn/img_convert/a139b12cf506ea9571fd02e18993a87c.png)
SpaceBetween:元素在主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素与行首对齐,最后一个元素与行尾对齐。
![](https://img-blog.csdnimg.cn/img_convert/52f693772107f25920965581daedc867.png)
SpaceAround:元素在主轴方向均匀分配弹性元素,相邻元素之间距离相同。 第一个元素到行首的距离和最后一个元素到行尾的距离是相邻元素之间距离的一半。
![](https://img-blog.csdnimg.cn/img_convert/cbd762457ac5d3992584cc75aeadd5e7.png)
SpaceEvenly:元素在主轴方向等间距布局,无论是相邻元素还是边界元素到容器的间距都一样。
![](https://img-blog.csdnimg.cn/img_convert/78d89d917625465e073f3c75129a8e7f.png)
2. 交叉轴方向的对齐(alignItems)
子组件在交叉轴方向上的对齐方式使用alignItems属性来设置。
Column容器的主轴是垂直方向,交叉轴是水平方向,其参数类型为HorizontalAlign(水平对齐),HorizontalAlign定义了以下几种类型:
Start:设置子组件在水平方向上按照起始端对齐。
![](https://img-blog.csdnimg.cn/img_convert/435226fff38187c768e0653c3bbeda39.png)
Center(默认值):设置子组件在水平方向上居中对齐。
![](https://img-blog.csdnimg.cn/img_convert/c937ff03d995fa1b95bdb0f57eb45dd2.png)
End:设置子组件在水平方向上按照末端对齐。
![](https://img-blog.csdnimg.cn/img_convert/08534058286ce280161354c32daa6e35.png)
Row容器的主轴是水平方向,交叉轴是垂直方向,其参数类型为VerticalAlign(垂直对齐),VerticalAlign定义了以下几种类型:
Top:设置子组件在垂直方向上居顶部对齐。
![](https://img-blog.csdnimg.cn/img_convert/cf79202ccf18870344bdb8544abb3a1a.png)
Center(默认值):设置子组件在竖直方向上居中对齐。
![](https://img-blog.csdnimg.cn/img_convert/87e655bd7009a315ac1260e9eb3ee40e.png)
Bottom:设置子组件在竖直方向上居底部对齐。
![](https://img-blog.csdnimg.cn/img_convert/5f3496559f5200570327be1b6f133fe0.png)
接口介绍
接下来,我们介绍Column和Row容器的接口。
容器组件 | 接口 |
Column | Column(value?:{space?: string | number}) |
Row | Row(value?:{space?: string | number}) |
Column和Row容器的接口都有一个可选参数space,表示子组件在主轴方向上的间距。
效果如下:
![](https://img-blog.csdnimg.cn/img_convert/05c762f38c1c1d9c174edbf60bb3e922.png)