Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
9b0401c6
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
9b0401c6
编写于
10月 09, 2022
作者:
O
openharmony_ci
提交者:
Gitee
10月 09, 2022
浏览文件
操作
浏览文件
下载
差异文件
!10345 挑单3.2beta3
Merge pull request !10345 from 田雨/cherry-pick-1665225413
上级
cda6e4e6
0a8b0f40
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
83 addition
and
58 deletion
+83
-58
zh-cn/application-dev/reference/arkui-ts/figures/richText.png
...n/application-dev/reference/arkui-ts/figures/richText.png
+0
-0
zh-cn/application-dev/reference/arkui-ts/ts-basic-components-richtext.md
...on-dev/reference/arkui-ts/ts-basic-components-richtext.md
+3
-1
zh-cn/application-dev/ui/ui-ts-creating-simple-page.md
zh-cn/application-dev/ui/ui-ts-creating-simple-page.md
+80
-57
未找到文件。
zh-cn/application-dev/reference/arkui-ts/figures/richText.png
0 → 100644
浏览文件 @
9b0401c6
26.0 KB
zh-cn/application-dev/reference/arkui-ts/ts-basic-components-richtext.md
浏览文件 @
9b0401c6
...
@@ -79,4 +79,6 @@ struct RichTextExample {
...
@@ -79,4 +79,6 @@ struct RichTextExample {
}
}
}
}
}
}
```
```
\ No newline at end of file
!
[
richText
](
figures/richText.png
)
\ No newline at end of file
zh-cn/application-dev/ui/ui-ts-creating-simple-page.md
浏览文件 @
9b0401c6
# 创建简单视图
# 创建简单视图
在这一小节中,我们将开始食物详情页的开发,学习如何通过容器组件Stack、Flex和基
本
组件Image、Text,构建用户自定义组件,完成图文并茂的食物介绍。
在这一小节中,我们将开始食物详情页的开发,学习如何通过容器组件Stack、Flex和基
础
组件Image、Text,构建用户自定义组件,完成图文并茂的食物介绍。
## 构建Stack布局
## 构建Stack布局
...
@@ -24,7 +24,8 @@
...
@@ -24,7 +24,8 @@
!
[
zh-cn_image_0000001214128687
](
figures/zh-cn_image_0000001214128687.png
)
!
[
zh-cn_image_0000001214128687
](
figures/zh-cn_image_0000001214128687.png
)
2.
食物图片展示。
2.
食物图片展示。
创建Image组件,指定Image组件的url,Image组件和Text组件都是必选构造参数组件。为了让Text组件在Image组件上方显示,所以要先声明Image组件。图片资源放在resources下的rawfile文件夹内,引用rawfile下资源时使用
`$rawfile('filename')`
的形式,filename为rawfile目录下的文件相对路径。当前
`$rawfile`
仅支持Image控件引用图片资源。
创建Image组件,指定Image组件的url,Image组件是必选构造参数组件。为了让Text组件在Image组件上方显示,所以要先声明Image组件。图片资源放在resources下的rawfile文件夹内,引用rawfile下资源时使用
`$rawfile('filename')`
的形式,filename为rawfile目录下的文件相对路径。当前
`$rawfile`
仅支持Image控件引用图片资源。
```
```
@Entry
@Entry
@Component
@Component
...
@@ -40,15 +41,16 @@
...
@@ -40,15 +41,16 @@
}
}
```
```
!
[
zh-cn_image_0000001168410342
](
figures/zh-cn_image_0000001168410342.png
)
![
zh-cn_image_0000001168410342
](
figures/zh-cn_image_0000001168410342.png
)
3.
通过资源访问图片。
3.
通过资源访问图片。
除指定图片路径外,也可以使用引用媒体资源符$r引用资源,需要遵循resources文件夹的资源限定词的规则。右键resources文件夹,点击New
>
Resource Directory,选择Resource Type为Media(图片资源)。
除指定图片路径外,也可以使用引用媒体资源符$r引用资源,需要遵循resources文件夹的资源限定词的规则。右键resources文件夹,点击New
>
Resource Directory,选择Resource Type为Media(图片资源)。
将Tomato.png放入media文件夹内。就可以通过
`$r('app.type.name')`
的形式引用应用资源,即
`$r('app.media.Tomato')`
。
将Tomato.png放入media文件夹内。就可以通过
`$r('app.type.name')`
的形式引用应用资源,即
`$r('app.media.Tomato')`
。
```
```
@Entry
@Entry
@Component
@Component
struct MyComponent {
struct MyComponent {
build() {
build() {
...
@@ -62,7 +64,8 @@
...
@@ -62,7 +64,8 @@
}
}
}
}
}
}
```
```
4.
设置Image宽高,并且将image的objectFit属性设置为ImageFit.Contain,即保持图片长宽比的情况下,使得图片完整地显示在边界内。
4.
设置Image宽高,并且将image的objectFit属性设置为ImageFit.Contain,即保持图片长宽比的情况下,使得图片完整地显示在边界内。
如果Image填满了整个屏幕,原因如下:
如果Image填满了整个屏幕,原因如下:
...
@@ -70,8 +73,8 @@
...
@@ -70,8 +73,8 @@
2.
Image的objectFit默认属性是ImageFit.Cover,即在保持长宽比的情况下放大或缩小,使其填满整个显示边界。
2.
Image的objectFit默认属性是ImageFit.Cover,即在保持长宽比的情况下放大或缩小,使其填满整个显示边界。
```
```
@Entry
@Entry
@Component
@Component
struct MyComponent {
struct MyComponent {
build() {
build() {
...
@@ -85,13 +88,15 @@
...
@@ -85,13 +88,15 @@
}
}
}
}
}
}
```
```
!
[
zh-cn_image_0000001214210217
](
figures/zh-cn_image_0000001214210217.png
)
!
[
zh-cn_image_0000001214210217
](
figures/zh-cn_image_0000001214210217.png
)
5.
设置食物图片和名称布局。设置Stack的对齐方式为底部起始端对齐,Stack默认为居中对齐。设置Stack构造参数alignContent为Alignment.BottomStart。其中Alignment和FontWeight一样,都是框架提供的内置枚举类型。
5.
设置食物图片和名称布局。设置Stack的对齐方式为底部起始端对齐,Stack默认为居中对齐。设置Stack构造参数alignContent为Alignment.BottomStart。其中Alignment和FontWeight一样,都是框架提供的内置枚举类型。
```
@Entry
```
@Entry
@Component
@Component
struct MyComponent {
struct MyComponent {
build() {
build() {
...
@@ -105,16 +110,21 @@
...
@@ -105,16 +110,21 @@
}
}
}
}
}
}
```
```
!
[
zh-cn_image_0000001168728872
](
figures/zh-cn_image_0000001168728872.png
)
!
[
zh-cn_image_0000001168728872
](
figures/zh-cn_image_0000001168728872.png
)
6.
通过设置Stack的背景颜色来改变食物图片的背景颜色,设置颜色有
两
种方式:
6.
通过设置Stack的背景颜色来改变食物图片的背景颜色,设置颜色有
四
种方式:
1.
通过框架提供的Color内置枚举值来设置,比如backgroundColor(Color.Red),即设置背景颜色为红色。
1.
通过框架提供的Color内置枚举值来设置,比如backgroundColor(Color.Red),即设置背景颜色为红色。
2.
string类型参数,支持的颜色格式有:rgb、rgba和HEX颜色码。比如backgroundColor('
\#
0000FF'),即设置背景颜色为蓝色,backgroundColor('rgb(255, 255, 255)'),即设置背景颜色为白色。
2.
string类型参数,支持的颜色格式有:rgb、rgba和HEX颜色码。比如backgroundColor('
\#
0000FF'),即设置背景颜色为蓝色,backgroundColor('rgb(255, 255, 255)'),即设置背景颜色为白色。
3.
number类型参数,支持十六进制颜色值。比如backgroundColor(0xFF0000),即设置背景颜色为红色。
4.
Resource类型参数请参考
[
资源访问
](
ts-resource-access.md
)
。
```
```
@Entry
@Entry
@Component
@Component
struct MyComponent {
struct MyComponent {
build() {
build() {
...
@@ -128,8 +138,9 @@
...
@@ -128,8 +138,9 @@
}
}
.backgroundColor('#FFedf2f5')
.backgroundColor('#FFedf2f5')
}
}
}
}
```
```
!
[
zh-cn_image_0000001168888822
](
figures/zh-cn_image_0000001168888822.png
)
!
[
zh-cn_image_0000001168888822
](
figures/zh-cn_image_0000001168888822.png
)
...
@@ -137,8 +148,8 @@
...
@@ -137,8 +148,8 @@
1.
参数为Length时,即统一指定四个边的外边距,比如margin(20),即上、右、下、左四个边的外边距都是20。
1.
参数为Length时,即统一指定四个边的外边距,比如margin(20),即上、右、下、左四个边的外边距都是20。
2.
参数为{top?: Length, right?: Length, bottom?: Length, left?:Length},即分别指定四个边的边距,比如margin({ left: 26, bottom: 17.4 }),即左边距为26,下边距为17.4。
2.
参数为{top?: Length, right?: Length, bottom?: Length, left?:Length},即分别指定四个边的边距,比如margin({ left: 26, bottom: 17.4 }),即左边距为26,下边距为17.4。
```
```
@Entry
@Entry
@Component
@Component
struct MyComponent {
struct MyComponent {
build() {
build() {
...
@@ -154,15 +165,16 @@
...
@@ -154,15 +165,16 @@
.backgroundColor('#FFedf2f5')
.backgroundColor('#FFedf2f5')
}
}
}
}
```
```
!
[
zh-cn_image_0000001213968747
](
figures/zh-cn_image_0000001213968747.png
)
!
[
zh-cn_image_0000001213968747
](
figures/zh-cn_image_0000001213968747.png
)
8.
调整组件间的结构,语义化组件名称。创建页面入口组件为FoodDetail,在FoodDetail中创建Column,设置水平方向上居中对齐 alignItems(HorizontalAlign.Center)。MyComponent组件名改为FoodImageDisplay,为FoodDetail的子组件。
8.
调整组件间的结构,语义化组件名称。创建页面入口组件为FoodDetail,在FoodDetail中创建Column,设置水平方向上居中对齐 alignItems(HorizontalAlign.Center)。MyComponent组件名改为FoodImageDisplay,为FoodDetail的子组件。
Column是子组件竖直排列的容器组件,本质为线性布局,所以只能设置交叉轴方向的对齐。
Column是子组件竖直排列的容器组件,本质为线性布局,所以只能设置交叉轴方向的对齐。
```
```
@Component
@Component
struct FoodImageDisplay {
struct FoodImageDisplay {
build() {
build() {
Stack({ alignContent: Alignment.BottomStart }) {
Stack({ alignContent: Alignment.BottomStart }) {
...
@@ -188,7 +200,8 @@
...
@@ -188,7 +200,8 @@
.alignItems(HorizontalAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}
}
}
```
```
## 构建Flex布局
## 构建Flex布局
...
@@ -196,8 +209,9 @@
...
@@ -196,8 +209,9 @@
开发者可以使用Flex弹性布局来构建食物的食物成分表,弹性布局在本场景的优势在于可以免去多余的宽高计算,通过比例来设置不同单元格的大小,更加灵活。
开发者可以使用Flex弹性布局来构建食物的食物成分表,弹性布局在本场景的优势在于可以免去多余的宽高计算,通过比例来设置不同单元格的大小,更加灵活。
1.
创建ContentTable组件,使其成为页面入口组件FoodDetail的子组件。
1.
创建ContentTable组件,使其成为页面入口组件FoodDetail的子组件。
```
@Component
```
@Component
struct FoodImageDisplay {
struct FoodImageDisplay {
build() {
build() {
Stack({ alignContent: Alignment.BottomStart }) {
Stack({ alignContent: Alignment.BottomStart }) {
...
@@ -229,7 +243,8 @@
...
@@ -229,7 +243,8 @@
.alignItems(HorizontalAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}
}
}
```
```
2.
创建Flex组件展示Tomato两类成分。
2.
创建Flex组件展示Tomato两类成分。
一类是热量Calories,包含卡路里(Calories);一类是营养成分Nutrition,包含蛋白质(Protein)、脂肪(Fat)、碳水化合物(Carbohydrates)和维生素C(VitaminC)。
一类是热量Calories,包含卡路里(Calories);一类是营养成分Nutrition,包含蛋白质(Protein)、脂肪(Fat)、碳水化合物(Carbohydrates)和维生素C(VitaminC)。
...
@@ -238,8 +253,8 @@
...
@@ -238,8 +253,8 @@
已省略FoodImageDisplay代码,只针对ContentTable进行扩展。
已省略FoodImageDisplay代码,只针对ContentTable进行扩展。
```
```
@Component
@Component
struct ContentTable {
struct ContentTable {
build() {
build() {
Flex() {
Flex() {
...
@@ -267,13 +282,15 @@
...
@@ -267,13 +282,15 @@
.alignItems(HorizontalAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}
}
}
```
```
!
[
zh-cn_image_0000001169759552
](
figures/zh-cn_image_0000001169759552.png
)
!
[
zh-cn_image_0000001169759552
](
figures/zh-cn_image_0000001169759552.png
)
3.
调整布局,设置各部分占比。分类名占比(layoutWeight)为1,成分名和成分含量一共占比(layoutWeight)2。成分名和成分含量位于同一个Flex中,成分名占据所有剩余空间flexGrow(1)。
3.
调整布局,设置各部分占比。分类名占比(layoutWeight)为1,成分名和成分含量一共占比(layoutWeight)2。成分名和成分含量位于同一个Flex中,成分名占据所有剩余空间flexGrow(1)。
```
@Component
```
@Component
struct FoodImageDisplay {
struct FoodImageDisplay {
build() {
build() {
Stack({ alignContent: Alignment.BottomStart }) {
Stack({ alignContent: Alignment.BottomStart }) {
...
@@ -322,15 +339,16 @@
...
@@ -322,15 +339,16 @@
.alignItems(HorizontalAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}
}
}
```
```
!
[
zh-cn_image_0000001215079443
](
figures/zh-cn_image_0000001215079443.png
)
!
[
zh-cn_image_0000001215079443
](
figures/zh-cn_image_0000001215079443.png
)
4.
仿照热量分类创建营养成分分类。营养成分部分(Nutrition)包含:蛋白质(Protein)、脂肪(Fat)、碳水化合物(Carbohydrates)和维生素C(VitaminC)四个成分,后三个成分在表格中省略分类名,用空格代替。
4.
仿照热量分类创建营养成分分类。营养成分部分(Nutrition)包含:蛋白质(Protein)、脂肪(Fat)、碳水化合物(Carbohydrates)和维生素C(VitaminC)四个成分,后三个成分在表格中省略分类名,用空格代替。
设置外层Flex为竖直排列FlexDirection.Column, 在主轴方向(竖直方向)上等距排列FlexAlign.SpaceBetween,在交叉轴方向(水平轴方向)上首部对齐排列ItemAlign.Start。
设置外层Flex为竖直排列FlexDirection.Column, 在主轴方向(竖直方向)上等距排列FlexAlign.SpaceBetween,在交叉轴方向(水平轴方向)上首部对齐排列ItemAlign.Start。
```
```
@Component
@Component
struct ContentTable {
struct ContentTable {
build() {
build() {
Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) {
Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) {
...
@@ -421,7 +439,8 @@
...
@@ -421,7 +439,8 @@
.alignItems(HorizontalAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}
}
}
```
```
5.
使用自定义构造函数
\@
Builder简化代码。可以发现,每个成分表中的成分单元其实都是一样的UI结构。
5.
使用自定义构造函数
\@
Builder简化代码。可以发现,每个成分表中的成分单元其实都是一样的UI结构。
!
[
zh-cn_image_0000001169599582
](
figures/zh-cn_image_0000001169599582.png
)
!
[
zh-cn_image_0000001169599582
](
figures/zh-cn_image_0000001169599582.png
)
...
@@ -430,8 +449,8 @@
...
@@ -430,8 +449,8 @@
在ContentTable内声明
\@
Builder修饰的IngredientItem方法,用于声明分类名、成分名称和成分含量UI描述。
在ContentTable内声明
\@
Builder修饰的IngredientItem方法,用于声明分类名、成分名称和成分含量UI描述。
```
```
@Component
@Component
struct ContentTable {
struct ContentTable {
@Builder IngredientItem(title:string, name: string, value: string) {
@Builder IngredientItem(title:string, name: string, value: string) {
Flex() {
Flex() {
...
@@ -450,12 +469,13 @@
...
@@ -450,12 +469,13 @@
}
}
}
}
}
}
```
```
在ContentTable的build方法内调用IngredientItem接口,需要用this去调用该Component作用域内的方法,以此来区分全局的方法调用。
```
在ContentTable的build方法内调用IngredientItem接口,需要用this去调用该Component作用域内的方法,以此来区分全局的方法调用。
@Component
```
@Component
struct ContentTable {
struct ContentTable {
......
......
build() {
build() {
...
@@ -470,12 +490,13 @@
...
@@ -470,12 +490,13 @@
.padding({ top: 30, right: 30, left: 30 })
.padding({ top: 30, right: 30, left: 30 })
}
}
}
}
```
```
ContentTable组件整体代码如下。
```
ContentTable组件整体代码如下。
@Component
```
@Component
struct ContentTable {
struct ContentTable {
@Builder IngredientItem(title:string, name: string, value: string) {
@Builder IngredientItem(title:string, name: string, value: string) {
Flex() {
Flex() {
...
@@ -494,17 +515,18 @@
...
@@ -494,17 +515,18 @@
}
}
}
}
build() {
build() {
Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) {
Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) {
this.IngredientItem('Calories', 'Calories', '17kcal')
this.IngredientItem('Calories', 'Calories', '17kcal')
this.IngredientItem('Nutrition', 'Protein', '0.9g')
this.IngredientItem('Nutrition', 'Protein', '0.9g')
this.IngredientItem('', 'Fat', '0.2g')
this.IngredientItem('', 'Fat', '0.2g')
this.IngredientItem('', 'Carbohydrates', '3.9g')
this.IngredientItem('', 'Carbohydrates', '3.9g')
this.IngredientItem('', 'VitaminC', '17.8mg')
this.IngredientItem('', 'VitaminC', '17.8mg')
}
}
.height(280)
.height(280)
.padding({ top: 30, right: 30, left: 30 })
.padding({ top: 30, right: 30, left: 30 })
}
}
}
}
@Entry
@Entry
...
@@ -518,7 +540,8 @@
...
@@ -518,7 +540,8 @@
.alignItems(HorizontalAlign.Center)
.alignItems(HorizontalAlign.Center)
}
}
}
}
```
```
!
[
zh-cn_image_0000001215199399
](
figures/zh-cn_image_0000001215199399.png
)
!
[
zh-cn_image_0000001215199399
](
figures/zh-cn_image_0000001215199399.png
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录