Touch and hold the image
diff --git a/zh-cn/application-dev/ui/ui-js-components-offscreencanvas.md b/zh-cn/application-dev/ui/ui-js-components-offscreencanvas.md
index f645c710a356f4a369c8bda538eccea9649b2ea9..ac829edabd4609f862920a5004cd4dbf394f7109 100644
--- a/zh-cn/application-dev/ui/ui-js-components-offscreencanvas.md
+++ b/zh-cn/application-dev/ui/ui-js-components-offscreencanvas.md
@@ -1,6 +1,6 @@
# OffscreenCanvasRenderingContext2D对象
-使用OffscreenCanvas在离屏Canvas画布组件上进行绘制,绘制对象可以是矩形、文本、图片等。具体请参考[OffscreenCanvasRenderingContext2D对象](../reference/arkui-js/js-offscreencanvasrenderingcontext2d.md)。
+使用OffscreenCanvas在离屏Canvas画布组件上进行绘制,绘制对象可以是矩形、文本、图片等。 离屏,即GPU在当前缓冲区以外新开辟的一个缓冲区。 具体请参考[OffscreenCanvasRenderingContext2D对象](../reference/arkui-js/js-offscreencanvasrenderingcontext2d.md)。
以下示例创建了一个OffscreenCanvas画布,再在画布上创建一个getContext2d对象,并设置filter属性改变图片样式。
diff --git a/zh-cn/application-dev/ui/ui-js-components-path2d.md b/zh-cn/application-dev/ui/ui-js-components-path2d.md
index f5e8690de8ab83fbecaf8ba481c2af6313fcb7b5..2345c9123ba3a8e6a630ba11f8c5d1e11aa4f741 100644
--- a/zh-cn/application-dev/ui/ui-js-components-path2d.md
+++ b/zh-cn/application-dev/ui/ui-js-components-path2d.md
@@ -68,7 +68,7 @@ export default {
path.moveTo(600, 535);
path.arc(520, 450, 85, 0, 6);
ctx.stroke(path);
- },
+ }
}
```
@@ -131,51 +131,66 @@ text{
```
// xxx.js
import prompt from '@system.prompt';
+
export default {
- data:{
- ctx: null,
- path1: null,
- path2: null,
- path3: null,
- isAdd: "addPath2",
- isChange: true,
- textName: 'change'
- },
- onShow(){
- this.ctx = this.$refs.canvas.getContext('2d',{antialias:true});
- this.path1 = this.ctx.createPath2D();
- this.path1.moveTo(200, 200);
- this.path1.lineTo(400, 200);
- this.path1.lineTo(400, 400);
- this.path1.lineTo(200, 400);
- this.path1.closePath();
- this.path2 = this.ctx.createPath2D();
- this.path2.arc(300, 300, 75, 0, 6.28)
- this.ctx.stroke(this.path1);
- },
- addPath(){
- if(this.isAdd == "addPath2"){
- this.ctx.clearRect(0,0,600,600)
- this.ctx.beginPath();
- this.path2.addPath(this.path1)
- this.ctx.stroke(this.path2);
- this.isAdd = "clearPath2"
- }else{
- this.ctx.clearRect(0,0,600,600)
- this.ctx.stroke(this.path1); this.isAdd = "addPath2"
- }
- },
- setTransform(){
- if(this.isChange){
- this.ctx.clearRect(0,0,600,600)
- this.path3 = this.ctx.createPath2D();
- this.path3.arc(150, 150, 100, 0, 6.28)
- this.path3.setTransform(2, 0.1, 0.1, 2, 0,0); this.ctx.stroke(this.path3); this.isChange = !this.isChange; this.textName = "back"
- }else{
- this.ctx.clearRect(0,0,600,600)
- this.path3.setTransform(0.5, -0.1, -0.1, 0.5, 0,0);this.ctx.stroke(this.path3);this.isChange = !this.isChange; this.textName = "change"
+ data: {
+ ctx: null,
+ path1: null,
+ path2: null,
+ path3: null,
+ isAdd: "addPath2",
+ isChange: true,
+ textName: 'change'
+ },
+ onShow() {
+ this.ctx = this.$refs.canvas.getContext('2d', {
+ antialias: true
+ });
+ this.path1 = this.ctx.createPath2D();
+ // 正方形
+ this.path1.moveTo(200, 200);
+ this.path1.lineTo(400, 200);
+ this.path1.lineTo(400, 400);
+ this.path1.lineTo(200, 400);
+ this.path1.closePath();
+ this.path2 = this.ctx.createPath2D();
+ // 圆形
+ this.path2.arc(300, 300, 75, 0, 6.28);
+ this.ctx.stroke(this.path1);
+ },
+ addPath() {
+ if (this.isAdd == "addPath2") {
+ // 删除指定指定区域的绘制内容
+ this.ctx.clearRect(0, 0, 600, 600);
+ this.ctx.beginPath();
+ // 将另一个的路径添加到当前路径对象中
+ this.path2.addPath(this.path1);
+ this.ctx.stroke(this.path2);
+ this.isAdd = "clearPath2";
+ } else {
+ this.ctx.clearRect(0, 0, 600, 600);
+ this.ctx.stroke(this.path1);
+ this.isAdd = "addPath2";
+ }
+ },
+ setTransform() {
+ if (this.isChange) {
+ this.ctx.clearRect(0, 0, 600, 600);
+ this.path3 = this.ctx.createPath2D();
+ this.path3.arc(150, 150, 100, 0, 6.28);
+ // 重置现有的变换矩阵并创建新的变换矩阵
+ this.path3.setTransform(2, 0.1, 0.1, 2, 0, 0);
+ this.ctx.stroke(this.path3);
+ this.isChange = !this.isChange;
+ this.textName = "back"
+ } else {
+ this.ctx.clearRect(0, 0, 600, 600);
+ this.path3.setTransform(0.5, -0.1, -0.1, 0.5, 0, 0);
+ this.ctx.stroke(this.path3);
+ this.isChange = !this.isChange;
+ this.textName = "change";
+ }
}
- },
}
```
diff --git a/zh-cn/application-dev/ui/ui-js-components-picker.md b/zh-cn/application-dev/ui/ui-js-components-picker.md
index d9b41d2a7d2ebc85836ad8d9e3518bc47cc11240..4fd2782d40fa24583b403c7331f7184d5ead3c8e 100644
--- a/zh-cn/application-dev/ui/ui-js-components-picker.md
+++ b/zh-cn/application-dev/ui/ui-js-components-picker.md
@@ -11,7 +11,7 @@ Picker是滑动选择器组件,类型支持普通选择器、日期选择器
picker
-
+
```
```
diff --git a/zh-cn/application-dev/ui/ui-js-custom-components.md b/zh-cn/application-dev/ui/ui-js-custom-components.md
index 7e520b1aee36ebdae7fb840c87e685937e191366..1ae23f0f14524df61cd1b3d54f3fa10063ae009a 100755
--- a/zh-cn/application-dev/ui/ui-js-custom-components.md
+++ b/zh-cn/application-dev/ui/ui-js-custom-components.md
@@ -1,6 +1,6 @@
# 自定义组件
-使用基于JS扩展的类Web开发范式的方舟开发框架支持自定义组件,用户可根据业务需求将已有的组件进行扩展,增加自定义的私有属性和事件,封装成新的组件,方便在工程中多次调用,提高页面布局代码的可读性。具体的封装方法示例如下:
+使用兼容JS扩展的类Web开发范式的方舟开发框架支持自定义组件,用户可根据业务需求将已有的组件进行扩展,增加自定义的私有属性和事件,封装成新的组件,方便在工程中多次调用,提高页面布局代码的可读性。具体的封装方法示例如下:
- 构建自定义组件
diff --git a/zh-cn/application-dev/ui/ui-ts-building-category-grid-layout.md b/zh-cn/application-dev/ui/ui-ts-building-category-grid-layout.md
index 6246ee523ea8676d0bdb500def97cd88c586a2d7..2ce0276cfa511d524f44c059d96c9f3352b4efc9 100644
--- a/zh-cn/application-dev/ui/ui-ts-building-category-grid-layout.md
+++ b/zh-cn/application-dev/ui/ui-ts-building-category-grid-layout.md
@@ -320,7 +320,7 @@
}
```
- 自定义组件提供了两个生命周期的回调接口aboutToAppear和aboutToDisappear。aboutToAppear的执行时机在创建自定义组件后,执行自定义组件build方法之前。aboutToDisappear在自定义组件的去初始化的时机执行。
+ 自定义组件提供了两个生命周期的回调接口aboutToAppear和aboutToDisappear。aboutToAppear的执行时机在创建自定义组件后,执行自定义组件build方法之前。aboutToDisappear在自定义组件销毁之前的时机执行。

diff --git a/zh-cn/application-dev/ui/ui-ts-creating-simple-page.md b/zh-cn/application-dev/ui/ui-ts-creating-simple-page.md
index 8e976dd67cf0ff1769a0057fb32b9fa4ff0472b5..9ac54343c438a09bdc16395838a3c61222249ef2 100644
--- a/zh-cn/application-dev/ui/ui-ts-creating-simple-page.md
+++ b/zh-cn/application-dev/ui/ui-ts-creating-simple-page.md
@@ -1,6 +1,6 @@
# 创建简单视图
-在这一小节中,我们将开始食物详情页的开发,学习如何通过容器组件Stack、Flex和基本组件Image、Text,构建用户自定义组件,完成图文并茂的食物介绍。
+在这一小节中,我们将开始食物详情页的开发,学习如何通过容器组件Stack、Flex和基础组件Image、Text,构建用户自定义组件,完成图文并茂的食物介绍。
## 构建Stack布局
@@ -24,7 +24,8 @@

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
@Component
@@ -40,15 +41,16 @@
}
```
- 
+
+
3. 通过资源访问图片。
除指定图片路径外,也可以使用引用媒体资源符$r引用资源,需要遵循resources文件夹的资源限定词的规则。右键resources文件夹,点击New>Resource Directory,选择Resource Type为Media(图片资源)。
将Tomato.png放入media文件夹内。就可以通过`$r('app.type.name')`的形式引用应用资源,即`$r('app.media.Tomato')`。
- ```
- @Entry
+```
+@Entry
@Component
struct MyComponent {
build() {
@@ -62,7 +64,8 @@
}
}
}
- ```
+```
+
4. 设置Image宽高,并且将image的objectFit属性设置为ImageFit.Contain,即保持图片长宽比的情况下,使得图片完整地显示在边界内。
如果Image填满了整个屏幕,原因如下:
@@ -70,8 +73,8 @@
2. Image的objectFit默认属性是ImageFit.Cover,即在保持长宽比的情况下放大或缩小,使其填满整个显示边界。
- ```
- @Entry
+```
+@Entry
@Component
struct MyComponent {
build() {
@@ -85,13 +88,15 @@
}
}
}
- ```
+```
+

5. 设置食物图片和名称布局。设置Stack的对齐方式为底部起始端对齐,Stack默认为居中对齐。设置Stack构造参数alignContent为Alignment.BottomStart。其中Alignment和FontWeight一样,都是框架提供的内置枚举类型。
- ```
- @Entry
+
+```
+@Entry
@Component
struct MyComponent {
build() {
@@ -105,16 +110,21 @@
}
}
}
- ```
+```
+

-6. 通过设置Stack的背景颜色来改变食物图片的背景颜色,设置颜色有两种方式:
+6. 通过设置Stack的背景颜色来改变食物图片的背景颜色,设置颜色有四种方式:
1. 通过框架提供的Color内置枚举值来设置,比如backgroundColor(Color.Red),即设置背景颜色为红色。
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
struct MyComponent {
build() {
@@ -128,8 +138,9 @@
}
.backgroundColor('#FFedf2f5')
}
- }
- ```
+}
+```
+

@@ -137,8 +148,8 @@
1. 参数为Length时,即统一指定四个边的外边距,比如margin(20),即上、右、下、左四个边的外边距都是20。
2. 参数为{top?: Length, right?: Length, bottom?: Length, left?:Length},即分别指定四个边的边距,比如margin({ left: 26, bottom: 17.4 }),即左边距为26,下边距为17.4。
- ```
- @Entry
+```
+@Entry
@Component
struct MyComponent {
build() {
@@ -154,15 +165,16 @@
.backgroundColor('#FFedf2f5')
}
}
- ```
+```
+

8. 调整组件间的结构,语义化组件名称。创建页面入口组件为FoodDetail,在FoodDetail中创建Column,设置水平方向上居中对齐 alignItems(HorizontalAlign.Center)。MyComponent组件名改为FoodImageDisplay,为FoodDetail的子组件。
Column是子组件竖直排列的容器组件,本质为线性布局,所以只能设置交叉轴方向的对齐。
- ```
- @Component
+```
+@Component
struct FoodImageDisplay {
build() {
Stack({ alignContent: Alignment.BottomStart }) {
@@ -188,7 +200,8 @@
.alignItems(HorizontalAlign.Center)
}
}
- ```
+```
+
## 构建Flex布局
@@ -196,8 +209,9 @@
开发者可以使用Flex弹性布局来构建食物的食物成分表,弹性布局在本场景的优势在于可以免去多余的宽高计算,通过比例来设置不同单元格的大小,更加灵活。
1. 创建ContentTable组件,使其成为页面入口组件FoodDetail的子组件。
- ```
- @Component
+
+```
+@Component
struct FoodImageDisplay {
build() {
Stack({ alignContent: Alignment.BottomStart }) {
@@ -229,7 +243,8 @@
.alignItems(HorizontalAlign.Center)
}
}
- ```
+```
+
2. 创建Flex组件展示Tomato两类成分。
一类是热量Calories,包含卡路里(Calories);一类是营养成分Nutrition,包含蛋白质(Protein)、脂肪(Fat)、碳水化合物(Carbohydrates)和维生素C(VitaminC)。
@@ -238,8 +253,8 @@
已省略FoodImageDisplay代码,只针对ContentTable进行扩展。
- ```
- @Component
+```
+@Component
struct ContentTable {
build() {
Flex() {
@@ -267,13 +282,15 @@
.alignItems(HorizontalAlign.Center)
}
}
- ```
+```
+

3. 调整布局,设置各部分占比。分类名占比(layoutWeight)为1,成分名和成分含量一共占比(layoutWeight)2。成分名和成分含量位于同一个Flex中,成分名占据所有剩余空间flexGrow(1)。
- ```
- @Component
+
+```
+@Component
struct FoodImageDisplay {
build() {
Stack({ alignContent: Alignment.BottomStart }) {
@@ -322,15 +339,16 @@
.alignItems(HorizontalAlign.Center)
}
}
- ```
+```
+

4. 仿照热量分类创建营养成分分类。营养成分部分(Nutrition)包含:蛋白质(Protein)、脂肪(Fat)、碳水化合物(Carbohydrates)和维生素C(VitaminC)四个成分,后三个成分在表格中省略分类名,用空格代替。
设置外层Flex为竖直排列FlexDirection.Column, 在主轴方向(竖直方向)上等距排列FlexAlign.SpaceBetween,在交叉轴方向(水平轴方向)上首部对齐排列ItemAlign.Start。
- ```
- @Component
+```
+@Component
struct ContentTable {
build() {
Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) {
@@ -421,7 +439,8 @@
.alignItems(HorizontalAlign.Center)
}
}
- ```
+```
+
5. 使用自定义构造函数\@Builder简化代码。可以发现,每个成分表中的成分单元其实都是一样的UI结构。

@@ -430,8 +449,8 @@
在ContentTable内声明\@Builder修饰的IngredientItem方法,用于声明分类名、成分名称和成分含量UI描述。
- ```
- @Component
+```
+ @Component
struct ContentTable {
@Builder IngredientItem(title:string, name: string, value: string) {
Flex() {
@@ -450,12 +469,13 @@
}
}
}
- ```
+```
- 在ContentTable的build方法内调用IngredientItem接口,需要用this去调用该Component作用域内的方法,以此来区分全局的方法调用。
- ```
- @Component
+ 在ContentTable的build方法内调用IngredientItem接口,需要用this去调用该Component作用域内的方法,以此来区分全局的方法调用。
+
+```
+@Component
struct ContentTable {
......
build() {
@@ -470,12 +490,13 @@
.padding({ top: 30, right: 30, left: 30 })
}
}
- ```
+```
- ContentTable组件整体代码如下。
- ```
- @Component
+ ContentTable组件整体代码如下。
+
+```
+@Component
struct ContentTable {
@Builder IngredientItem(title:string, name: string, value: string) {
Flex() {
@@ -494,17 +515,18 @@
}
}
- build() {
- Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) {
- this.IngredientItem('Calories', 'Calories', '17kcal')
- this.IngredientItem('Nutrition', 'Protein', '0.9g')
- this.IngredientItem('', 'Fat', '0.2g')
- this.IngredientItem('', 'Carbohydrates', '3.9g')
- this.IngredientItem('', 'VitaminC', '17.8mg')
- }
- .height(280)
- .padding({ top: 30, right: 30, left: 30 })
- }
+ build() {
+ Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.SpaceBetween, alignItems: ItemAlign.Start }) {
+ this.IngredientItem('Calories', 'Calories', '17kcal')
+ this.IngredientItem('Nutrition', 'Protein', '0.9g')
+ this.IngredientItem('', 'Fat', '0.2g')
+ this.IngredientItem('', 'Carbohydrates', '3.9g')
+ this.IngredientItem('', 'VitaminC', '17.8mg')
+ }
+ .height(280)
+ .padding({ top: 30, right: 30, left: 30 })
+ }
+
}
@Entry
@@ -518,7 +540,8 @@
.alignItems(HorizontalAlign.Center)
}
}
- ```
+```
+

diff --git a/zh-cn/application-dev/ui/ui-ts-layout-mediaquery.md b/zh-cn/application-dev/ui/ui-ts-layout-mediaquery.md
index ec103e4e07a3e4e52cd9e2de53f066a321cf2137..4434c8b5072eef327e30a7baf9ff466a871aad60 100644
--- a/zh-cn/application-dev/ui/ui-ts-layout-mediaquery.md
+++ b/zh-cn/application-dev/ui/ui-ts-layout-mediaquery.md
@@ -130,7 +130,7 @@ listener.on('change', onPortrait)
}
aboutToAppear() {
- portraitFunc = this.onPortrait.bind(this) //bind current js instance
+ portraitFunc = this.onPortrait.bind(this) // 绑定当前应用实例
this.listener.on('change', portraitFunc)
}
diff --git a/zh-cn/application-dev/ui/ui-ts-overview.md b/zh-cn/application-dev/ui/ui-ts-overview.md
index 5f7780947f8cbd6e014c98897bced69c3b6d5d60..aa4f9c9c119eec9bf70c6325c28e7e22b98722ea 100644
--- a/zh-cn/application-dev/ui/ui-ts-overview.md
+++ b/zh-cn/application-dev/ui/ui-ts-overview.md
@@ -1,13 +1,13 @@
# 概述
-基于TS扩展的声明式开发范式的方舟开发框架是一套开发极简、高性能、跨设备应用的UI开发框架,支持开发者高效的构建跨设备应用UI界面。
+基于eTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、跨设备应用的UI开发框架,支持开发者高效的构建跨设备应用UI界面。
## 基础能力
-使用基于TS扩展的声明式开发范式的方舟开发框架,采用更接近自然语义的编程方式,让开发者可以直观地描述UI界面,不必关心框架如何实现UI绘制和渲染,实现极简高效开发。开发框架不仅从组件、动效和状态管理三个维度来提供UI能力,还提供了系统能力接口,实现系统能力的极简调用。
+使用基于eTS的声明式开发范式的方舟开发框架,采用更接近自然语义的编程方式,让开发者可以直观地描述UI界面,不必关心框架如何实现UI绘制和渲染,实现极简高效开发。开发框架不仅从组件、动效和状态管理三个维度来提供UI能力,还提供了系统能力接口,实现系统能力的极简调用。
-请参考[基于TS扩展的声明式开发范式API](../reference/arkui-ts/ts-universal-events-click.md)文档,全面地了解组件,更好地开发应用。
+请参考[基于eTS的声明式开发范式API](../reference/arkui-ts/ts-universal-events-click.md)文档,全面地了解组件,更好地开发应用。
- **开箱即用的组件**
@@ -22,12 +22,12 @@
- **状态与数据管理**
- 状态数据管理作为基于TS扩展的声明式开发范式的特色,通过功能不同的装饰器给开发者提供了清晰的页面更新渲染流程和管道。状态管理包括UI组件状态和应用程序状态,两者协作可以使开发者完整地构建整个应用的数据更新和UI渲染。
+ 状态数据管理作为基于eTS的声明式开发范式的特色,通过功能不同的装饰器给开发者提供了清晰的页面更新渲染流程和管道。状态管理包括UI组件状态和应用程序状态,两者协作可以使开发者完整地构建整个应用的数据更新和UI渲染。
- **系统能力接口**
- 使用基于TS扩展的声明式开发范式的方舟开发框架,还封装了丰富的系统能力接口,开发者可以通过简单的接口调用,实现从UI设计到系统能力调用的极简开发。
+ 使用基于eTS的声明式开发范式的方舟开发框架,还封装了丰富的系统能力接口,开发者可以通过简单的接口调用,实现从UI设计到系统能力调用的极简开发。
## 整体架构
@@ -59,7 +59,7 @@
## 相关实例
-基于TS扩展的声明式开发范式的方舟开发框架,有以下相关实例可供参考:
+基于eTS的声明式开发范式的方舟开发框架,有以下相关实例可供参考:
- [`Canvas`:画布组件(eTS)(API8)](https://gitee.com/openharmony/applications_app_samples/tree/master/ETSUI/Canvas)
@@ -73,7 +73,7 @@
- [`Gallery`:组件集合(eTS)(API8)](https://gitee.com/openharmony/applications_app_samples/tree/master/ETSUI/Gallery)
-- [`BringApp`:拉起系统应用(eTS)(API8)](https://gitee.com/openharmony/applications_app_samples/tree/master/ETSUI/BringApp)
+- [`BringApp`:拉起系统应用(eTS)(API8)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/ETSUI/BringApp)
- [`Chat`:聊天示例应用(eTS)(API8)](https://gitee.com/openharmony/applications_app_samples/tree/master/AppSample/Chat)
diff --git a/zh-cn/application-dev/website.md b/zh-cn/application-dev/website.md
index 7bccc0af2d0e8bb1a4624d4f6500b6068656a66f..501d53db5e072cf594bccd0d6e17b90d761e3d9d 100644
--- a/zh-cn/application-dev/website.md
+++ b/zh-cn/application-dev/website.md
@@ -34,13 +34,12 @@
- [测试框架使用指导](ability/ability-delegator.md)
- UI开发
- [方舟开发框架(ArkUI)概述](ui/arkui-overview.md)
- - 基于TS扩展的声明式开发范式
+ - 基于eTS的声明式开发范式
- [概述](ui/ui-ts-overview.md)
- 框架说明
- 文件组织
- [目录结构](ui/ts-framework-directory.md)
- [应用代码文件访问规则](ui/ts-framework-file-access-rules.md)
- - [js标签配置](ui/ts-framework-js-tag.md)
- 资源管理
- [资源文件的分类](ui/ui-ts-basic-resource-file-categories.md)
- [资源访问](ui/ts-resource-access.md)
@@ -104,7 +103,7 @@
- [构建食物分类Grid布局](ui/ui-ts-building-category-grid-layout.md)
- [页面跳转与数据传递](ui/ui-ts-page-redirection-data-transmission.md)
- [性能提升的推荐方案](ui/ts-performance-improvement-recommendation.md)
- - 基于JS扩展的类Web开发范式
+ - 兼容JS的类Web开发范式
- [概述](ui/ui-js-overview.md)
- 框架说明
- [文件组织](ui/js-framework-file.md)
diff --git a/zh-cn/release-notes/api-change/v3.1-Release/changelog-v3.1-release.md b/zh-cn/release-notes/api-change/v3.1-Release/changelog-v3.1-release.md
new file mode 100644
index 0000000000000000000000000000000000000000..cc569f933aff1bd331034e409a908561c350cb30
--- /dev/null
+++ b/zh-cn/release-notes/api-change/v3.1-Release/changelog-v3.1-release.md
@@ -0,0 +1,21 @@
+# 3.1 release相对于3.1 beta变更详细说明
+
+### 针对color.json中颜色值,增加合法性校验
+
+针对color.json中颜色值,增加合法性校验,其校验规则如下:
+
+- 使用十六进制颜色码,格式如下:
+ - #rgb:red(0-f) green(0-f) blue(0-f)
+ - #argb:transparency(0-f) red(0-f) green(0-f) blue(0-f)
+ - #rrggbb: red(00-ff) green(00-ff) blue(00-ff)
+ - #aarrggbb: transparency(00-ff) red(00-ff) green(00-ff) blue(00-ff)
+- 使用$引用应用中已定义的资源,格式如下:
+ - $color:xxx
+
+**变更影响**
+
+不符合上述校验规则,将在编译时报错。
+
+**关键的接口/组件变更**
+
+无
\ No newline at end of file
diff --git a/zh-cn/release-notes/api-change/v3.1-Release/readme.md b/zh-cn/release-notes/api-change/v3.1-Release/readme.md
index ca69ac422e485e04f319ae9dcddabf66012a99dd..6c1ca7ef961568d5b08f3d6b8eb91f83b3dc47db 100644
--- a/zh-cn/release-notes/api-change/v3.1-Release/readme.md
+++ b/zh-cn/release-notes/api-change/v3.1-Release/readme.md
@@ -4,7 +4,7 @@
- [JS API差异报告](js-apidiff-v3.1-release.md)
- [Native API差异报告](native-apidiff-v3.1-release.md)
+- [3.1 release相对于3.1 beta变更详细说明](changelog-v3.1-release.md)
此外,本次还发布了OpenHarmony 3.2 Canary (API Version 9 Canary)版本:
[JS API差异报告(API Version 9 Canary)](js-apidiff-v3.2-canary.md)
-
diff --git a/zh-cn/website.md b/zh-cn/website.md
index 9c00f78df4b670bc2cbe2e4aca093b912cb296f7..76c5157702ae3a5ff1956e4482b0bf02125cfb30 100644
--- a/zh-cn/website.md
+++ b/zh-cn/website.md
@@ -64,6 +64,7 @@
- [资源调度](release-notes/api-change/v3.1-Release/js-apidiff-resource-scheduler_api-9-canary.md)
- [窗口管理](release-notes/api-change/v3.1-Release/js-apidiff-window_api-9-canary.md)
- [Native API差异报告](release-notes/api-change/v3.1-Release/native-apidiff-v3.1-release.md)
+ - [3.1 release相对于3.1 beta变更详细说明](release-notes/api-change/v3.1-Release/changelog-v3.1-release.md)
- 贡献
- [参与贡献](contribute/参与贡献.md)
- [行为准则](contribute/行为准则.md)