提交 04759510 编写于 作者: DCloud_iOS_WZT's avatar DCloud_iOS_WZT

Merge branch 'master' of gitcode.net:dcloud/unidocs-uni-app-x-zh

此差异已折叠。
* [概述](README.md) * [概述](README.md)
* [公共属性和事件](common.md) * [公共属性和事件](common.md)
* 内置组件```{"collapsable": false}``` * 内置组件```{"collapsable": false}```
* [view](view.md) * 视图容器
* [scroll-view](scroll-view.md) * [基本视图容器](view.md)
* [nested-scroll](nested-scroll.md) * [可滚动视图容器](scroll-view.md)
* [list-view](list-view.md) * 滑块视图容器```{"collapsable": false}```
* [sticky](sticky.md) * [swiper](swiper.md)
* [swiper](swiper.md) * [swiper-item](swiper-item.md)
* [navigator](navigator.md) * [match-media](match-media.md)
* [text](text.md) * [可拖动区域](movable-area.md)
* [rich-text](rich-text.md) * [可移动的视图容器](movable-view.md)
* [image](image.md) * [cover-view](cover-view.md)
* [input](input.md) * [cover-image](cover-image.md)
* [textarea](textarea.md) * 列表组件```{"collapsable": false}```
* [button](button.md) * [list-view](list-view.md)
* [checkbox](checkbox-group.md) * [list-item](list-item.md)
* [radio](radio-group.md) * sticky```{"collapsable": false}```
* [picker-view](picker-view.md) * [sticky-header](sticky-header.md)
* [progress](progress.md) * [sticky-section](sticky-section.md)
* [slider](slider.md) * nested-scroll```{"collapsable": false}```
* [switch](switch.md) * [nested-scroll-header](nested-scroll-header.md)
* [form](form.md) * [nested-scroll-body](nested-scroll-body.md)
* [canvas](canvas.md) * 基础内容
* [video](video.md) * [图标](icon.md)
* [web-view](web-view.md) * [文本](text.md)
* [富图标](rich-text.md)
* [进度条](progress.md)
* 表单组件
* [按钮](button.md)
* 多选框```{"collapsable": false}```
* [多选框组](checkbox-group.md)
* [多选框](checkbox.md)
* [表单](form.md)
* [输入框](input.md)
* [富文本编辑器](editor.md)
* [label](label.md)
* [底部弹出的滚动选择器](picker.md)
* 嵌入页面的滚动选择器```{"collapsable": false}```
* [picker-view](picker-view.md)
* [picker-view-column](picker-view-column.md)
* 单选项```{"collapsable": false}```
* [单选组](radio-group.md)
* [单选项](radio.md)
* [滑动选择器](slider.md)
* [开关选择器](switch.md)
* [多行输入框](textarea.md)
* 导航
* [页面链接](navigator.md)
* 媒体组件
* [音频](audio.md)
* [图片](image.md)
* [视频](video.md)
* live```{"collapsable": false}```
* [live-player](live-player.md)
* [live-pusher](live-pusher.md)
* 地图
* [地图](map.md)
* 画布
* [画布](canvas.md)
* 网页
* [web-view](web-view.md)
* 页面属性配置节点
* [page-meta](page-meta.md)
* [navigation-bar](navigation-bar.md)
* [custom-tab-bar](custom-tab-bar.md)
* unicloud
* [unicloud-db](unicloud-db.md)
* [animation-view](animation-view.md) * [animation-view](animation-view.md)
* [unicloud-db](unicloud-db.md)
* [其他组件](unsupport.md) * [其他组件](unsupport.md)
## audio
<!-- UTSCOMJSON.audio.description -->
<!-- UTSCOMJSON.audio.compatibility -->
<!-- UTSCOMJSON.audio.attribute -->
<!-- UTSCOMJSON.audio.event -->
<!-- UTSCOMJSON.audio.component_type -->
<!-- UTSCOMJSON.audio.children -->
<!-- UTSCOMJSON.audio.example -->
<!-- UTSCOMJSON.audio.reference -->
...@@ -17,22 +17,3 @@ ...@@ -17,22 +17,3 @@
<!-- UTSCOMJSON.checkbox-group.example --> <!-- UTSCOMJSON.checkbox-group.example -->
<!-- UTSCOMJSON.checkbox-group.reference --> <!-- UTSCOMJSON.checkbox-group.reference -->
## checkbox
<!-- UTSCOMJSON.checkbox.description -->
<!-- UTSCOMJSON.checkbox.compatibility -->
<!-- UTSCOMJSON.checkbox.attribute -->
<!-- UTSCOMJSON.checkbox.event -->
<!-- UTSCOMJSON.checkbox.component_type-->
<!-- UTSCOMJSON.checkbox.children -->
<!-- UTSCOMJSON.checkbox.example -->
<!-- UTSCOMJSON.checkbox.reference -->
## checkbox
<!-- UTSCOMJSON.checkbox.description -->
<!-- UTSCOMJSON.checkbox.compatibility -->
<!-- UTSCOMJSON.checkbox.attribute -->
<!-- UTSCOMJSON.checkbox.event -->
<!-- UTSCOMJSON.checkbox.component_type -->
<!-- UTSCOMJSON.checkbox.children -->
<!-- UTSCOMJSON.checkbox.example -->
<!-- UTSCOMJSON.checkbox.reference -->
## cover-image
<!-- UTSCOMJSON.cover-image.description -->
<!-- UTSCOMJSON.cover-image.compatibility -->
<!-- UTSCOMJSON.cover-image.attribute -->
<!-- UTSCOMJSON.cover-image.event -->
<!-- UTSCOMJSON.cover-image.component_type -->
<!-- UTSCOMJSON.cover-image.children -->
<!-- UTSCOMJSON.cover-image.example -->
<!-- UTSCOMJSON.cover-image.reference -->
## cover-view
<!-- UTSCOMJSON.cover-view.description -->
<!-- UTSCOMJSON.cover-view.compatibility -->
<!-- UTSCOMJSON.cover-view.attribute -->
<!-- UTSCOMJSON.cover-view.event -->
<!-- UTSCOMJSON.cover-view.component_type -->
<!-- UTSCOMJSON.cover-view.children -->
<!-- UTSCOMJSON.cover-view.example -->
<!-- UTSCOMJSON.cover-view.reference -->
## custom-tab-bar
<!-- UTSCOMJSON.custom-tab-bar.description -->
<!-- UTSCOMJSON.custom-tab-bar.compatibility -->
<!-- UTSCOMJSON.custom-tab-bar.attribute -->
<!-- UTSCOMJSON.custom-tab-bar.event -->
<!-- UTSCOMJSON.custom-tab-bar.component_type -->
<!-- UTSCOMJSON.custom-tab-bar.children -->
<!-- UTSCOMJSON.custom-tab-bar.example -->
<!-- UTSCOMJSON.custom-tab-bar.reference -->
## editor
<!-- UTSCOMJSON.editor.description -->
<!-- UTSCOMJSON.editor.compatibility -->
<!-- UTSCOMJSON.editor.attribute -->
<!-- UTSCOMJSON.editor.event -->
<!-- UTSCOMJSON.editor.component_type -->
<!-- UTSCOMJSON.editor.children -->
<!-- UTSCOMJSON.editor.example -->
<!-- UTSCOMJSON.editor.reference -->
## icon
<!-- UTSCOMJSON.icon.description -->
<!-- UTSCOMJSON.icon.compatibility -->
<!-- UTSCOMJSON.icon.attribute -->
<!-- UTSCOMJSON.icon.event -->
<!-- UTSCOMJSON.icon.component_type -->
<!-- UTSCOMJSON.icon.children -->
<!-- UTSCOMJSON.icon.example -->
<!-- UTSCOMJSON.icon.reference -->
## label
<!-- UTSCOMJSON.label.description -->
<!-- UTSCOMJSON.label.compatibility -->
<!-- UTSCOMJSON.label.attribute -->
<!-- UTSCOMJSON.label.event -->
<!-- UTSCOMJSON.label.component_type -->
<!-- UTSCOMJSON.label.children -->
<!-- UTSCOMJSON.label.example -->
<!-- UTSCOMJSON.label.reference -->
## list-item
<!-- UTSCOMJSON.list-item.description -->
<!-- UTSCOMJSON.list-item.compatibility -->
<!-- UTSCOMJSON.list-item.attribute -->
### list-item复用机制
> 仅App平台支持复用。Web平台仅渲染当前屏幕及上下一定高度内的元素,没有对list-item进行复用。
+ type属性定义list-item组件类型。不赋值type属性默认值为0,每一个type类型都会有对应的list-item组件缓存池。
+ list-view组件加载list-item组件时,会优先查询对应type缓存池是否存在可复用的list-item组件。有则复用没有则创建新的list-item组件。
+ list-item组件被滑动出屏幕则会优先添加到对应类型的list-item缓存池,每个类型缓存最大5个(不同平台缓存最大值不固定),如果缓存池已满则进行组件销毁!
+ 部分list-item组件存在子元素个数差异或排版差异时。请尽可能的配置不同的type,这样可以规避获取相同type类型的list-item组件后。
* 很常见的一个错误是在长列表上方的list-item里放置banner图,却没有为这个不可复用的list-item设置单独的type,这会导致图片在复用失败后无法渲染。
* 由于子元素差异导致list-item无法正常复用问题。具体可参考示例:
```html
<template>
<view class="content">
<list-view ref="listView" class="list" :scroll-y="true">
<list-item v-for="(item,index) in list" :key="index" class="content-item1" type=1>
<text class="text">title-{{item}}</text>
<text class="text">content-{{item}}</text>
</list-item>
<list-item v-for="(item,index) in list" :key="index" class="content-item2" type=2>
<image class="image" src ="/static/test-image/logo.png"></image>
</list-item>
<list-item type=3>
<text class="loading">{{text}}</text>
</list-item>
</list-view>
</view>
</template>
```
示例中有三种类型的list-item组件。如果都不赋值type,list-item组件滑动出屏幕后都归类到type=0的缓存池。当触发list-item组件重新加载时,获取type=0的缓存池的组件,获取到的list-item组件可能是两个text子组件也可能是一个image子组件或一个text子组件,底层复用判断时则认为该情况异常不复用,重新创建新的list-item组件!复用失败未能优化性能。正确的方式则是不同的类型设置不同的type。加载时则会获取对应type类型缓存池中的list-item组件实现复用。
**注意:**
1. 避免对list-item组件的子元素设置event事件,复用后list-item组件部分子元素可能无法正常响应event,有相关业务需要对子元素设置event事件,可对list-item组件设置独立的type实现不复用。
<!-- UTSCOMJSON.list-item.event -->
<!-- UTSCOMJSON.list-item.component_type-->
<!-- UTSCOMJSON.list-item.children -->
<!-- UTSCOMJSON.list-item.example -->
<!-- UTSCOMJSON.list-item.reference -->
#### App平台
+ App平台scroll-x、scroll-y属性不支持同时设置为true,同时设置true时仅scroll-y生效。4.0版本开始scroll-x、scroll-y已废弃,请使用direction属性。
+ App平台list-view组件默认高度取值:
- list-view组件的子元素高度之和未超过list-view组件的父元素高度:
+ list-view组件的默认高度取值为子元素高度之和
- list-view组件的子元素高度之和超过list-view组件的父元素高度:
+ 3.9版本list-view组件默认高度取值为list-view组件父元素的高度。子元素高度之和超过list-view组件的高度,list-view组件可滚动。
+ 4.0版本开始list-view组件的默认高度取值为子元素高度之和。高度相同list-view组件无法滚动。开发者需要设置css属性定义list-view组件高度,让list-view组件高度小于子元素高度之和,实现滚动能力。
#### Web平台
+ web平台仅渲染当前屏幕及上下一定距离的内容,滚动高度为空白容器占位,因此如果使用dom API获取list-item内的元素可能无法取到。
+ scroll-with-animation属性在safari 15.4以下版本不支持
+ 尽量避免在list-item上使用浏览器的[外边距折叠特性](https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing)会导致list-view无法准确计算回收的元素的高度,进而导致滚动出现异常。即不要同时为list-item设置上边距(margin-top)和下边距(margin-bottom)。
...@@ -59,76 +59,6 @@ scroll-view开启嵌套模式后,list-view 可作为内层滚动视图与外 ...@@ -59,76 +59,6 @@ scroll-view开启嵌套模式后,list-view 可作为内层滚动视图与外
<!-- UTSCOMJSON.list-view.reference --> <!-- UTSCOMJSON.list-view.reference -->
## list-item
<!-- UTSCOMJSON.list-item.description -->
<!-- UTSCOMJSON.list-item.compatibility -->
<!-- UTSCOMJSON.list-item.attribute -->
### list-item复用机制
> 仅App平台支持复用。Web平台仅渲染当前屏幕及上下一定高度内的元素,没有对list-item进行复用。
+ type属性定义list-item组件类型。不赋值type属性默认值为0,每一个type类型都会有对应的list-item组件缓存池。
+ list-view组件加载list-item组件时,会优先查询对应type缓存池是否存在可复用的list-item组件。有则复用没有则创建新的list-item组件。
+ list-item组件被滑动出屏幕则会优先添加到对应类型的list-item缓存池,每个类型缓存最大5个(不同平台缓存最大值不固定),如果缓存池已满则进行组件销毁!
+ 部分list-item组件存在子元素个数差异或排版差异时。请尽可能的配置不同的type,这样可以规避获取相同type类型的list-item组件后。
* 很常见的一个错误是在长列表上方的list-item里放置banner图,却没有为这个不可复用的list-item设置单独的type,这会导致图片在复用失败后无法渲染。
* 由于子元素差异导致list-item无法正常复用问题。具体可参考示例:
```html
<template>
<view class="content">
<list-view ref="listView" class="list" :scroll-y="true">
<list-item v-for="(item,index) in list" :key="index" class="content-item1" type=1>
<text class="text">title-{{item}}</text>
<text class="text">content-{{item}}</text>
</list-item>
<list-item v-for="(item,index) in list" :key="index" class="content-item2" type=2>
<image class="image" src ="/static/test-image/logo.png"></image>
</list-item>
<list-item type=3>
<text class="loading">{{text}}</text>
</list-item>
</list-view>
</view>
</template>
```
示例中有三种类型的list-item组件。如果都不赋值type,list-item组件滑动出屏幕后都归类到type=0的缓存池。当触发list-item组件重新加载时,获取type=0的缓存池的组件,获取到的list-item组件可能是两个text子组件也可能是一个image子组件或一个text子组件,底层复用判断时则认为该情况异常不复用,重新创建新的list-item组件!复用失败未能优化性能。正确的方式则是不同的类型设置不同的type。加载时则会获取对应type类型缓存池中的list-item组件实现复用。
**注意:**
1. 避免对list-item组件的子元素设置event事件,复用后list-item组件部分子元素可能无法正常响应event,有相关业务需要对子元素设置event事件,可对list-item组件设置独立的type实现不复用。
<!-- UTSCOMJSON.list-item.event -->
<!-- UTSCOMJSON.list-item.component_type-->
<!-- UTSCOMJSON.list-item.children -->
<!-- UTSCOMJSON.list-item.example -->
<!-- UTSCOMJSON.list-item.reference -->
#### App平台
+ App平台scroll-x、scroll-y属性不支持同时设置为true,同时设置true时仅scroll-y生效。4.0版本开始scroll-x、scroll-y已废弃,请使用direction属性。
+ App平台list-view组件默认高度取值:
- list-view组件的子元素高度之和未超过list-view组件的父元素高度:
+ list-view组件的默认高度取值为子元素高度之和
- list-view组件的子元素高度之和超过list-view组件的父元素高度:
+ 3.9版本list-view组件默认高度取值为list-view组件父元素的高度。子元素高度之和超过list-view组件的高度,list-view组件可滚动。
+ 4.0版本开始list-view组件的默认高度取值为子元素高度之和。高度相同list-view组件无法滚动。开发者需要设置css属性定义list-view组件高度,让list-view组件高度小于子元素高度之和,实现滚动能力。
#### Web平台
+ web平台仅渲染当前屏幕及上下一定距离的内容,滚动高度为空白容器占位,因此如果使用dom API获取list-item内的元素可能无法取到。
+ scroll-with-animation属性在safari 15.4以下版本不支持
+ 尽量避免在list-item上使用浏览器的[外边距折叠特性](https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_box_model/Mastering_margin_collapsing)会导致list-view无法准确计算回收的元素的高度,进而导致滚动出现异常。即不要同时为list-item设置上边距(margin-top)和下边距(margin-bottom)。
## 示例代码 ## 示例代码
- 联网联表:[https://gitcode.net/dcloud/hello-uni-app-x/-/blob/master/pages/template/list-news/list-news.uvue](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/master/pages/template/list-news/list-news.uvue) - 联网联表:[https://gitcode.net/dcloud/hello-uni-app-x/-/blob/master/pages/template/list-news/list-news.uvue](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/master/pages/template/list-news/list-news.uvue)
......
## live-player
<!-- UTSCOMJSON.live-player.description -->
<!-- UTSCOMJSON.live-player.compatibility -->
<!-- UTSCOMJSON.live-player.attribute -->
<!-- UTSCOMJSON.live-player.event -->
<!-- UTSCOMJSON.live-player.component_type -->
<!-- UTSCOMJSON.live-player.children -->
<!-- UTSCOMJSON.live-player.example -->
<!-- UTSCOMJSON.live-player.reference -->
## live-pusher
<!-- UTSCOMJSON.live-pusher.description -->
<!-- UTSCOMJSON.live-pusher.compatibility -->
<!-- UTSCOMJSON.live-pusher.attribute -->
<!-- UTSCOMJSON.live-pusher.event -->
<!-- UTSCOMJSON.live-pusher.component_type -->
<!-- UTSCOMJSON.live-pusher.children -->
<!-- UTSCOMJSON.live-pusher.example -->
<!-- UTSCOMJSON.live-pusher.reference -->
## map
<!-- UTSCOMJSON.map.description -->
<!-- UTSCOMJSON.map.compatibility -->
<!-- UTSCOMJSON.map.attribute -->
<!-- UTSCOMJSON.map.event -->
<!-- UTSCOMJSON.map.component_type -->
<!-- UTSCOMJSON.map.children -->
<!-- UTSCOMJSON.map.example -->
<!-- UTSCOMJSON.map.reference -->
## match-media
<!-- UTSCOMJSON.match-media.description -->
<!-- UTSCOMJSON.match-media.compatibility -->
<!-- UTSCOMJSON.match-media.attribute -->
<!-- UTSCOMJSON.match-media.event -->
<!-- UTSCOMJSON.match-media.component_type -->
<!-- UTSCOMJSON.match-media.children -->
<!-- UTSCOMJSON.match-media.example -->
<!-- UTSCOMJSON.match-media.reference -->
## movable-area
<!-- UTSCOMJSON.movable-area.description -->
<!-- UTSCOMJSON.movable-area.compatibility -->
<!-- UTSCOMJSON.movable-area.attribute -->
<!-- UTSCOMJSON.movable-area.event -->
<!-- UTSCOMJSON.movable-area.component_type -->
<!-- UTSCOMJSON.movable-area.children -->
<!-- UTSCOMJSON.movable-area.example -->
<!-- UTSCOMJSON.movable-area.reference -->
## movable-view
<!-- UTSCOMJSON.movable-view.description -->
<!-- UTSCOMJSON.movable-view.compatibility -->
<!-- UTSCOMJSON.movable-view.attribute -->
<!-- UTSCOMJSON.movable-view.event -->
<!-- UTSCOMJSON.movable-view.component_type -->
<!-- UTSCOMJSON.movable-view.children -->
<!-- UTSCOMJSON.movable-view.example -->
<!-- UTSCOMJSON.movable-view.reference -->
## navigation-bar
<!-- UTSCOMJSON.navigation-bar.description -->
<!-- UTSCOMJSON.navigation-bar.compatibility -->
<!-- UTSCOMJSON.navigation-bar.attribute -->
<!-- UTSCOMJSON.navigation-bar.event -->
<!-- UTSCOMJSON.navigation-bar.component_type -->
<!-- UTSCOMJSON.navigation-bar.children -->
<!-- UTSCOMJSON.navigation-bar.example -->
<!-- UTSCOMJSON.navigation-bar.reference -->
文档已迁移,请前往[nested-scroll](./nested-scroll.md)查看最新文档 ## nested-scroll-body
<!-- UTSCOMJSON.nested-scroll-body.description -->
<!-- UTSCOMJSON.nested-scroll-body.compatibility -->
<!-- UTSCOMJSON.nested-scroll-body.attribute -->
<!-- UTSCOMJSON.nested-scroll-body.event -->
<!-- UTSCOMJSON.nested-scroll-body.component_type-->
### 使用场景
scroll-view 嵌套场景中。内层 scroll-view 滚动时无法与外层 scroll-view 滚动衔接,无法实现嵌套滚动连贯效果。因此提供`nested-scroll-body`节点,存放内层 scroll-view 节点。`nested-scroll-body`会与外层`nested-scroll-header`衔接滚动逻辑实现连贯滚动。开发者只需将内层滚动节点放置`nested-scroll-body`节点内即可。具体用法请参考[scroll-view嵌套模式](https://doc.dcloud.net.cn/uni-app-x/component/scroll-view.html#nested-scroll-view)
**注意**
+ `nested-scroll-body` 组件不支持css, 排版需求要交给子节点实现
+ `nested-scroll-body` 组件不支持复数子节点,渲染时会取其第一个子节点来渲染
+ `nested-scroll-body` 组件只能渲染在 `nested-scroll-header`组件下面
+ 外层 scroll-view 的子节点中只能有一个 `nested-scroll-body`
<!-- UTSCOMJSON.nested-scroll-body.children -->
<!-- UTSCOMJSON.nested-scroll-body.example -->
<!-- UTSCOMJSON.nested-scroll-body.reference -->
文档已迁移,请前往[nested-scroll](./nested-scroll.md)查看最新文档 ## nested-scroll-header
<!-- UTSCOMJSON.nested-scroll-header.description -->
<!-- UTSCOMJSON.nested-scroll-header.compatibility -->
<!-- UTSCOMJSON.nested-scroll-header.attribute -->
<!-- UTSCOMJSON.nested-scroll-header.event -->
<!-- UTSCOMJSON.nested-scroll-header.component_type-->
### 使用场景
scroll-view 嵌套场景中。外层 scroll-view 滚动时无法与内层 scroll-view 滚动衔接连贯滚动,因此提供`nested-scroll-header`节点,存放除内层 scroll-view 以外的内容节点。`nested-scroll-body`内部 scroll-view 滚动时会检测`nested-scroll-header`节点滚动位置,约束内层 scroll-view 滚动逻辑,实现嵌套模式下衔接连贯滚动。开发者只需将外层要显示内容节点放置`nested-scroll-header`节点内即可。具体用法请参考[scroll-view嵌套模式](https://doc.dcloud.net.cn/uni-app-x/component/scroll-view.html#nested-scroll-view)
**注意**
+ `nested-scroll-header` 组件不支持css, 排版需求要交给子节点实现
+ `nested-scroll-header` 组件不支持复数子节点,渲染时会取其第一个子节点来渲染
+ `nested-scroll-header` 组件只能渲染在 `nested-scroll-body`组件上面
<!-- UTSCOMJSON.nested-scroll-header.children -->
<!-- UTSCOMJSON.nested-scroll-header.example -->
<!-- UTSCOMJSON.nested-scroll-header.reference -->
## nested-scroll-header 文档已迁移至:
<!-- UTSCOMJSON.nested-scroll-header.description --> - [nested-scroll-header](nested-scroll-header.md)
- [nested-scroll-body](nested-scroll-body.md)
<!-- UTSCOMJSON.nested-scroll-header.compatibility -->
<!-- UTSCOMJSON.nested-scroll-header.attribute -->
<!-- UTSCOMJSON.nested-scroll-header.event -->
<!-- UTSCOMJSON.nested-scroll-header.component_type-->
### 使用场景
scroll-view 嵌套场景中。外层 scroll-view 滚动时无法与内层 scroll-view 滚动衔接连贯滚动,因此提供`nested-scroll-header`节点,存放除内层 scroll-view 以外的内容节点。`nested-scroll-body`内部 scroll-view 滚动时会检测`nested-scroll-header`节点滚动位置,约束内层 scroll-view 滚动逻辑,实现嵌套模式下衔接连贯滚动。开发者只需将外层要显示内容节点放置`nested-scroll-header`节点内即可。具体用法请参考[scroll-view嵌套模式](https://doc.dcloud.net.cn/uni-app-x/component/scroll-view.html#nested-scroll-view)
**注意**
+ `nested-scroll-header` 组件不支持css, 排版需求要交给子节点实现
+ `nested-scroll-header` 组件不支持复数子节点,渲染时会取其第一个子节点来渲染
+ `nested-scroll-header` 组件只能渲染在 `nested-scroll-body`组件上面
<!-- UTSCOMJSON.nested-scroll-header.children -->
<!-- UTSCOMJSON.nested-scroll-header.example -->
<!-- UTSCOMJSON.nested-scroll-header.reference -->
## nested-scroll-body
<!-- UTSCOMJSON.nested-scroll-body.description -->
<!-- UTSCOMJSON.nested-scroll-body.compatibility -->
<!-- UTSCOMJSON.nested-scroll-body.attribute -->
<!-- UTSCOMJSON.nested-scroll-body.event -->
<!-- UTSCOMJSON.nested-scroll-body.component_type-->
### 使用场景
scroll-view 嵌套场景中。内层 scroll-view 滚动时无法与外层 scroll-view 滚动衔接,无法实现嵌套滚动连贯效果。因此提供`nested-scroll-body`节点,存放内层 scroll-view 节点。`nested-scroll-body`会与外层`nested-scroll-header`衔接滚动逻辑实现连贯滚动。开发者只需将内层滚动节点放置`nested-scroll-body`节点内即可。具体用法请参考[scroll-view嵌套模式](https://doc.dcloud.net.cn/uni-app-x/component/scroll-view.html#nested-scroll-view)
**注意**
+ `nested-scroll-body` 组件不支持css, 排版需求要交给子节点实现
+ `nested-scroll-body` 组件不支持复数子节点,渲染时会取其第一个子节点来渲染
+ `nested-scroll-body` 组件只能渲染在 `nested-scroll-header`组件下面
+ 外层 scroll-view 的子节点中只能有一个 `nested-scroll-body`
<!-- UTSCOMJSON.nested-scroll-body.children -->
<!-- UTSCOMJSON.nested-scroll-body.example -->
<!-- UTSCOMJSON.nested-scroll-body.reference -->
## page-meta
<!-- UTSCOMJSON.page-meta.description -->
<!-- UTSCOMJSON.page-meta.compatibility -->
<!-- UTSCOMJSON.page-meta.attribute -->
<!-- UTSCOMJSON.page-meta.event -->
<!-- UTSCOMJSON.page-meta.component_type -->
<!-- UTSCOMJSON.page-meta.children -->
<!-- UTSCOMJSON.page-meta.example -->
<!-- UTSCOMJSON.page-meta.reference -->
## picker-view-column
<!-- UTSCOMJSON.picker-view-column.description -->
<!-- UTSCOMJSON.picker-view-column.compatibility -->
<!-- UTSCOMJSON.picker-view-column.attribute -->
<!-- UTSCOMJSON.picker-view-column.event -->
<!-- UTSCOMJSON.picker-view-column.component_type-->
<!-- UTSCOMJSON.picker-view-column.children -->
<!-- UTSCOMJSON.picker-view-column.example -->
<!-- UTSCOMJSON.picker-view-column.reference -->
...@@ -16,25 +16,6 @@ ...@@ -16,25 +16,6 @@
<!-- UTSCOMJSON.picker-view.reference --> <!-- UTSCOMJSON.picker-view.reference -->
## picker-view-column
<!-- UTSCOMJSON.picker-view-column.description -->
<!-- UTSCOMJSON.picker-view-column.compatibility -->
<!-- UTSCOMJSON.picker-view-column.attribute -->
<!-- UTSCOMJSON.picker-view-column.event -->
<!-- UTSCOMJSON.picker-view-column.component_type-->
<!-- UTSCOMJSON.picker-view-column.children -->
<!-- UTSCOMJSON.picker-view-column.example -->
<!-- UTSCOMJSON.picker-view-column.reference -->
## tips ## tips
- picker里如放置较长内容,应该使用list-view而不是scroll-view。 - picker里如放置较长内容,应该使用list-view而不是scroll-view。
- uni ui的[uni-data-picker](https://ext.dcloud.net.cn/plugin?id=3796),是封装好的弹出式、分列加载的、DataCom规范的多列选择组件,适用于地址选择等场景。 - uni ui的[uni-data-picker](https://ext.dcloud.net.cn/plugin?id=3796),是封装好的弹出式、分列加载的、DataCom规范的多列选择组件,适用于地址选择等场景。
## picker
<!-- UTSCOMJSON.picker.description -->
<!-- UTSCOMJSON.picker.compatibility -->
<!-- UTSCOMJSON.picker.attribute -->
<!-- UTSCOMJSON.picker.event -->
<!-- UTSCOMJSON.picker.component_type -->
<!-- UTSCOMJSON.picker.children -->
<!-- UTSCOMJSON.picker.example -->
<!-- UTSCOMJSON.picker.reference -->
...@@ -17,22 +17,3 @@ ...@@ -17,22 +17,3 @@
<!-- UTSCOMJSON.radio-group.example --> <!-- UTSCOMJSON.radio-group.example -->
<!-- UTSCOMJSON.radio-group.reference --> <!-- UTSCOMJSON.radio-group.reference -->
## radio
<!-- UTSCOMJSON.radio.description -->
<!-- UTSCOMJSON.radio.compatibility -->
<!-- UTSCOMJSON.radio.attribute -->
<!-- UTSCOMJSON.radio.event -->
<!-- UTSCOMJSON.radio.component_type-->
<!-- UTSCOMJSON.radio.children -->
<!-- UTSCOMJSON.radio.example -->
<!-- UTSCOMJSON.radio.reference -->
## radio
<!-- UTSCOMJSON.radio.description -->
<!-- UTSCOMJSON.radio.compatibility -->
<!-- UTSCOMJSON.radio.attribute -->
<!-- UTSCOMJSON.radio.event -->
<!-- UTSCOMJSON.radio.component_type -->
<!-- UTSCOMJSON.radio.children -->
<!-- UTSCOMJSON.radio.example -->
<!-- UTSCOMJSON.radio.reference -->
## sticky-header
<!-- UTSCOMJSON.sticky-header.description -->
<!-- UTSCOMJSON.sticky-header.compatibility -->
<!-- UTSCOMJSON.sticky-header.attribute -->
<!-- UTSCOMJSON.sticky-header.event -->
<!-- UTSCOMJSON.sticky-header.component_type-->
### sticky-header使用场景
1. 父元素滚动过程中,某个元素有固定到父元素顶部的需求
需求其实就是元素吸顶。可将需要吸顶元素放入sticky-header组件中,sticky-header组件作为父元素的子元素,放到吸顶元素原来的位置即可。
**示例:**
```html
<list-view id="list-view" style="flex: 1; background-color: #f5f5f5;">
<sticky-header>
<!-- 固定到父元素顶部的元素 -->
<text style="padding: 20px; background-color: #f5f5f5;">向上滑动页面,体验sticky-header吸顶效果。</text>
</sticky-header>
<list-item v-for="index in 20" :key="index" style="padding: 15px; margin: 5px 0;background-color: #fff;border-radius: 5px;">
<text class="text">itme-content-{{index}}</text>
</list-item>
</list-view>
```
**注意**
+ sticky-header组件不支持css。仅支持padding属性控制子元素位置。其他排版需求要交给子元素实现
+ 同时存在多sticky-header组件请使用sticky-section组件充当父容器控制吸顶业务
<!-- UTSCOMJSON.sticky-header.children -->
<!-- UTSCOMJSON.sticky-header.example -->
<!-- UTSCOMJSON.sticky-header.reference -->
## sticky-section
<!-- UTSCOMJSON.sticky-section.description -->
<!-- UTSCOMJSON.sticky-section.compatibility -->
<!-- UTSCOMJSON.sticky-section.attribute -->
<!-- UTSCOMJSON.sticky-section.event -->
<!-- UTSCOMJSON.sticky-section.component_type-->
### sticky-section使用场景
1. 父元素滚动过程中,多个元素有固定到父元素顶部的需求。
父元素中多个元素吸顶需要使用sticky-section组件。sticky-section组件作为sticky-header组件的父容器。sticky-section组件会控制子元素的滚动吸顶业务。sticky-section组件之间可通过push-pinned-header属性控制吸顶重叠时是否上推。
**示例:**
```html
<list-view id="list-view" style="flex: 1; background-color: #f5f5f5;">
<sticky-section v-for="sectionId in 3" :id="sectionId" push-pinned-header=false>
<sticky-header>
<text style="padding: 20px; background-color: #f5f5f5;">sticky-header吸顶--{{sectionId}}</text>
</sticky-header>
<list-item v-for="index in 20" :key="index" style="padding: 15px; margin: 5px 0;background-color: #fff;border-radius: 5px;">
<text class="text">itme-content-{{index}}</text>
</list-item>
</sticky-section>
</list-view>
```
**注意**
+ sticky-section组件支持存放多个sticky-header子组件,多个sticky-header滚动吸顶时,后一个sticky-header会停靠在前一个sticky-header的末尾处, 仅限于同一个sticky-section父容器。多个sticky-section吸顶停靠通过push-pinned-header控制。
+ sticky-section组件是虚拟组件不会真实渲染。仅支持padding属性控制子元素位置。其他排版需求要交给子元素实现
+ Android平台sticky-section组件作为list-view的子元素时需要注意,sticky-section子元素仅支持sticky-header、list-item,其他元素无法正常显示
<!-- UTSCOMJSON.sticky-section.children -->
<!-- UTSCOMJSON.sticky-section.example -->
<!-- UTSCOMJSON.sticky-section.reference -->
## sticky-header 文档已迁移至:
<!-- UTSCOMJSON.sticky-header.description --> - [sticky-header](sticky-header.md)
- [sticky-section](sticky-section.md)
<!-- UTSCOMJSON.sticky-header.compatibility -->
<!-- UTSCOMJSON.sticky-header.attribute -->
<!-- UTSCOMJSON.sticky-header.event -->
<!-- UTSCOMJSON.sticky-header.component_type-->
### sticky-header使用场景
1. 父元素滚动过程中,某个元素有固定到父元素顶部的需求
需求其实就是元素吸顶。可将需要吸顶元素放入sticky-header组件中,sticky-header组件作为父元素的子元素,放到吸顶元素原来的位置即可。
**示例:**
```html
<list-view id="list-view" style="flex: 1; background-color: #f5f5f5;">
<sticky-header>
<!-- 固定到父元素顶部的元素 -->
<text style="padding: 20px; background-color: #f5f5f5;">向上滑动页面,体验sticky-header吸顶效果。</text>
</sticky-header>
<list-item v-for="index in 20" :key="index" style="padding: 15px; margin: 5px 0;background-color: #fff;border-radius: 5px;">
<text class="text">itme-content-{{index}}</text>
</list-item>
</list-view>
```
**注意**
+ sticky-header组件不支持css。仅支持padding属性控制子元素位置。其他排版需求要交给子元素实现
+ 同时存在多sticky-header组件请使用sticky-section组件充当父容器控制吸顶业务
<!-- UTSCOMJSON.sticky-header.children -->
<!-- UTSCOMJSON.sticky-header.example -->
<!-- UTSCOMJSON.sticky-header.reference -->
## sticky-section
<!-- UTSCOMJSON.sticky-section.description -->
<!-- UTSCOMJSON.sticky-section.compatibility -->
<!-- UTSCOMJSON.sticky-section.attribute -->
<!-- UTSCOMJSON.sticky-section.event -->
<!-- UTSCOMJSON.sticky-section.component_type-->
### sticky-section使用场景
1. 父元素滚动过程中,多个元素有固定到父元素顶部的需求。
父元素中多个元素吸顶需要使用sticky-section组件。sticky-section组件作为sticky-header组件的父容器。sticky-section组件会控制子元素的滚动吸顶业务。sticky-section组件之间可通过push-pinned-header属性控制吸顶重叠时是否上推。
**示例:**
```html
<list-view id="list-view" style="flex: 1; background-color: #f5f5f5;">
<sticky-section v-for="sectionId in 3" :id="sectionId" push-pinned-header=false>
<sticky-header>
<text style="padding: 20px; background-color: #f5f5f5;">sticky-header吸顶--{{sectionId}}</text>
</sticky-header>
<list-item v-for="index in 20" :key="index" style="padding: 15px; margin: 5px 0;background-color: #fff;border-radius: 5px;">
<text class="text">itme-content-{{index}}</text>
</list-item>
</sticky-section>
</list-view>
```
**注意**
+ sticky-section组件支持存放多个sticky-header子组件,多个sticky-header滚动吸顶时,后一个sticky-header会停靠在前一个sticky-header的末尾处, 仅限于同一个sticky-section父容器。多个sticky-section吸顶停靠通过push-pinned-header控制。
+ sticky-section组件是虚拟组件不会真实渲染。仅支持padding属性控制子元素位置。其他排版需求要交给子元素实现
+ Android平台sticky-section组件作为list-view的子元素时需要注意,sticky-section子元素仅支持sticky-header、list-item,其他元素无法正常显示
<!-- UTSCOMJSON.sticky-section.children -->
<!-- UTSCOMJSON.sticky-section.example -->
<!-- UTSCOMJSON.sticky-section.reference -->
## swiper-item
<!-- UTSCOMJSON.swiper-item.description -->
<!-- UTSCOMJSON.swiper-item.compatibility -->
<!-- UTSCOMJSON.swiper-item.attribute -->
<!-- UTSCOMJSON.swiper-item.event -->
<!-- UTSCOMJSON.swiper-item.component_type -->
<!-- UTSCOMJSON.swiper-item.children -->
<!-- UTSCOMJSON.swiper-item.example -->
<!-- UTSCOMJSON.swiper-item.reference -->
...@@ -389,16 +389,14 @@ maven { url 'https://jitpack.io' } ...@@ -389,16 +389,14 @@ maven { url 'https://jitpack.io' }
## 4 Android内置库@iodcloudutsandroid ## 4 Android内置库@iodcloudutsandroid
在uts里,Android的所有api都可以访问。 **在UTS语言中,所有的Android原生API都可以调用**
但是对于Android开发中高频使用`application``activity`等,UTS通过内置对象`UTSAndroid` 进行了包裹和封装。具体见下: 对于Android开发中高频使用的`application`/`activity`等系统能力、`uni-app`/`uni-app x` 运行时框架信息等,UTS通过内置对象`UTSAndroid` 进行了封装,以便开发者调用
### 4.1 application 上下文相关 下面列出了常见API的使用示例,完整的 `UTSAndroid` API文档参考:https://doc.dcloud.net.cn/uni-app-x/uts/utsandroid.html
#### 4.1.1 getAppContext
> HBuilderX 3.6.3+
#### getAppContext
```ts ```ts
import { UTSAndroid } from "io.dcloud.uts"; import { UTSAndroid } from "io.dcloud.uts";
...@@ -434,110 +432,7 @@ console.log(app) ...@@ -434,110 +432,7 @@ console.log(app)
``` ```
#### 4.1.2 getResourcePath(resourceName:String) #### getUniActivity
> HBuilderX 3.6.3+
```ts
import { UTSAndroid } from "io.dcloud.uts";
```
获取指定插件资源的运行期绝对路径
```ts
// [示例]获取指定资源路径
// 得到文件运行时路径: `/storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/__UNI__3732623/www/uni_modules/test-uts-static/static/logo.png`
UTSAndroid.getResourcePath("uni_modules/test-uts-static/static/logo.png")
```
#### 4.1.3 onAppTrimMemory / offAppTrimMemory
##### onAppTrimMemory
> HBuilderX 3.6.11+
App 内存不足时,系统回调函数 对应原生的API: onTrimMemory
```ts
UTSAndroid.onAppTrimMemory((level:Number) => {
let eventName = "onAppTrimMemory - " + level;
console.log(eventName);
});
```
##### offAppTrimMemory
> HBuilderX 3.6.11+
onAppTrimMemory 对应的反注册函数
如果传入的函数可为空,如果为空,则视为移除所有监听
```ts
// 移除所有监听
UTSAndroid.offAppTrimMemory()
// 移除指定监听
UTSAndroid.offAppTrimMemory((level:Number) => {
});
```
#### 4.1.4 onAppConfigChange / offAppConfigChange
##### onAppConfigChange
> HBuilderX 3.6.1+
App 配置发生变化时触发,比如横竖屏切换 对应原生的API: onConfigurationChanged
```ts
UTSAndroid.onAppConfigChange((ret:UTSJSONObject) => {
let eventName = "onAppConfigChange - " + JSON.stringify(ret);
console.log(eventName);
});
```
##### offAppConfigChange
与onAppConfigChange 对应的反注册函数
如果传入的函数可为空,如果为空,则视为移除所有监听
```ts
// 移除所有监听
UTSAndroid.offAppConfigChange();
// 移除指定监听
UTSAndroid.offAppConfigChange(function(ret){
});
```
--------------------------------
特别说明:除了本章节列出的函数外,android环境下 application 其他上下文方法都可以通过 getAppContext()!.xxx()的方式实现
比如获取app缓存目录:
```ts
UTSAndroid.getAppContext()!.getExternalCacheDir()!.getPath()
```
### 4.2 Activity 上下文 @activity
#### 4.2.1 getUniActivity
> HBuilderX 3.6.11+
获取当前插件所属的activity实例,对应android平台 getActivity 函数实现 获取当前插件所属的activity实例,对应android平台 getActivity 函数实现
...@@ -549,257 +444,13 @@ let decorView = UTSAndroid.getUniActivity()!.window.decorView; ...@@ -549,257 +444,13 @@ let decorView = UTSAndroid.getUniActivity()!.window.decorView;
let frameContent = decorView.findViewById<FrameLayout>(android.R.id.content) let frameContent = decorView.findViewById<FrameLayout>(android.R.id.content)
``` ```
#### 4.2.2 onAppActivityPause / offAppActivityPause #### onAppActivityDestroy
##### onAppActivityPause
> HBuilderX 3.6.3+
App的activity onPause时触发
```ts
UTSAndroid.onAppActivityPause(() => {
let eventName = "onAppActivityPause - " + Date.now();
console.log(eventName);
});
```
##### offAppActivityPause
> HBuilderX 3.6.9+
onAppActivityPause 对应的反注册函数
如果传入的函数可为空,如果为空,则视为移除所有监听
```ts
// 移除全部监听
UTSAndroid.offAppActivityPause();
// 移除指定监听
UTSAndroid.offAppActivityPause(() => {
});
```
#### 4.2.3 onAppActivityResume / offAppActivityResume
##### onAppActivityResume
> HBuilderX 3.6.3+
App的activity onResume时触发
```ts
UTSAndroid.onAppActivityResume(() => {
let eventName = "onAppActivityResume - " + Date.now();
console.log(eventName);
});
```
##### offAppActivityResume
> HBuilderX 3.6.9+
onAppActivityResume 对应的反注册函数
如果传入的函数可为空,如果为空,则视为移除所有监听
```ts
// 移除全部监听
UTSAndroid.onAppActivityResume();
// 移除指定监听
UTSAndroid.onAppActivityResume(() => {
});
```
#### 4.2.4 onAppActivityDestroy / offAppActivityDestroy
##### onAppActivityDestroy
> HBuilderX 3.6.3+
App 的 activity onDestroy时触发
```ts
UTSAndroid.onAppActivityDestroy(() => {
let eventName = "onAppActivityDestroy- " + Date.now();
console.log(eventName);
});
```
##### offAppActivityDestroy
> HBuilderX 3.6.9+
onAppActivityDestroy 对应的反注册函数
如果传入的函数可为空,如果为空,则视为移除所有监听
```ts
// 移除全部监听
UTSAndroid.offAppActivityDestroy();
// 移除指定监听
UTSAndroid.offAppActivityDestroy(() => {
});
```
#### 4.2.5 onAppActivityBack / offAppActivityBack
##### onAppActivityBack
> HBuilderX 3.6.3+
App 的 activity 回退物理按键点击时触发
```ts
UTSAndroid.onAppActivityBack(() => {
let eventName = "onAppActivityBack- " + Date.now();
console.log(eventName);
});
```
##### offAppActivityBack
> HBuilderX 3.6.9+
onAppActivityBack 对应的反注册函数
如果传入的函数可为空,如果为空,则视为移除所有监听
```ts
// 移除全部监听
UTSAndroid.offAppActivityBack();
// 移除指定监听
UTSAndroid.offAppActivityBack(() => {
});
```
#### 4.2.6 onAppActivityResult / offAppActivityResult
##### onAppActivityResult
> HBuilderX 3.6.8+
App 的 activity 启动其他activity的回调结果监听 对应原生的 [onActivityResult](https://developer.android.com/training/basics/intents/result)
需要特别注意的是 `requestCode` 参数,这个参数用于区别 不同的请求来源,开发者应该只处理自己发起请求
```ts
let customRequestCode = 12000
UTSAndroid.onAppActivityResult((requestCode: Int, resultCode: Int, data?: Intent) => {
if(requestCode == 12000){
// 我们发起的请求
let eventName = "onAppActivityResult - requestCode:" + requestCode + " -resultCode:"+resultCode + " -data:"+JSON.stringify(data);
console.log(eventName);
}else{
// 别的代码发起的请求,不要处理
}
});
```
##### offAppActivityResult
> HBuilderX 3.6.9+
onAppActivityResult 对应的反注册函数
如果传入的函数可为空,如果为空,则视为移除所有监听
```ts
// 移除全部监听
UTSAndroid.offAppActivityResult();
// 移除指定监听
UTSAndroid.offAppActivityResult(() => {
});
```
#### 4.2.7 onAppActivityRequestPermissionsResult / offAppActivityRequestPermissionsResult
> 已废弃,请使用 4.4章节系统权限管理替代此api
##### onAppActivityRequestPermissionsResult
> HBuilderX 3.6.3+
App 的 activity 获得权限请求结果的回调
```ts
UTSAndroid.onAppActivityRequestPermissionsResult((requestCode: number,
permissions: Array<string>,
grantResults: Array<number>) => {
console.log(grantResults);
console.log(permissions);
console.log(requestCode);
});
//发起定位权限申请
let permission = [Manifest.permission.ACCESS_COARSE_LOCATION]
ActivityCompat.requestPermissions(getUniActivity()!,
permission, 1001);
```
##### offAppActivityRequestPermissionsResult
> HBuilderX 3.6.9+
onAppActivityRequestPermissionsResult 对应的反注册函数
如果传入的函数可为空,如果为空,则视为移除所有监听
```ts
// 移除全部监听
UTSAndroid.offAppActivityRequestPermissionsResult();
// 移除指定监听
UTSAndroid.offAppActivityRequestPermissionsResult(() => {
});
```
-----------------------------
特别说明:除了本章节列出的函数外,android环境下 activity 其他上下文方法都可以通过 getUniActivity()!.xxx()的方式实现
比如获取当前activity的顶层View容器
```ts
UTSAndroid.getUniActivity()!.getWindow().getDecorView();
```
### 4.3 UTS插件开发中Activity生命周期注意事项
即使在android原生开发中,应用的生命周期管理也是十分重要的。 [android生命周期](https://developer.android.com/guide/components/activities/activity-lifecycle?hl=zh_cn) 即使在android原生开发中,应用的生命周期管理也是十分重要的。 [android生命周期](https://developer.android.com/guide/components/activities/activity-lifecycle?hl=zh_cn)
UTS环境中对原生的生命周期进行了封装和简化,大多数情况下,开发者只需要了解本章节中列出的 activity相关生命周期即可。 UTS环境中对原生的生命周期进行了封装和简化,大多数情况下,开发者只需要了解本章节中列出的 activity相关生命周期即可。
其中最为常见的场景,要数`onAppActivityDestroy`中释放系统资源:
其中最为常见的场景,要数`onAppActivityDestroy`中释放系统资源了:
举个例子,以Hello UTS [用户截屏插件](https://ext.dcloud.net.cn/plugin?id=9897)为例。 举个例子,以Hello UTS [用户截屏插件](https://ext.dcloud.net.cn/plugin?id=9897)为例。
...@@ -819,7 +470,8 @@ UTSAndroid.onAppActivityDestroy(function(){ ...@@ -819,7 +470,8 @@ UTSAndroid.onAppActivityDestroy(function(){
开发者在开发UTS插件时,如果遇到了类似使用系统组件的情况,也需要特别关注资源释放情况。 开发者在开发UTS插件时,如果遇到了类似使用系统组件的情况,也需要特别关注资源释放情况。
### 4.4 系统权限管理
#### 4.4 requestSystemPermission
HBuilder X 3.8.2版本之后支持 HBuilder X 3.8.2版本之后支持
...@@ -827,10 +479,6 @@ HBuilder X 3.8.2版本之后支持 ...@@ -827,10 +479,6 @@ HBuilder X 3.8.2版本之后支持
如果开发者使用了相同依赖,可能打包冲突。需要修改为 complileOnly 或者 修改为本章节内置API 如果开发者使用了相同依赖,可能打包冲突。需要修改为 complileOnly 或者 修改为本章节内置API
##### 4.4.1 requestSystemPermission
请求系统权限,对应的两个参数: 请求系统权限,对应的两个参数:
1 请求的权限列表 1 请求的权限列表
2 请求结果回调 2 请求结果回调
...@@ -851,38 +499,33 @@ UTSAndroid.requestSystemPermission(UTSAndroid.getUniActivity()!,permission,funct ...@@ -851,38 +499,33 @@ UTSAndroid.requestSystemPermission(UTSAndroid.getUniActivity()!,permission,funct
}) })
``` ```
##### 4.4.2 gotoSystemPermissionActivity --------------------------------
跳转至系统设置权限设置界面,一般是用户选择了不再继续询问选项后
```
let permissionWifi = ["android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"]
UTSAndroid.gotoSystemPermissionActivity(UTSAndroid.getUniActivity()!,permissionWifi)
```
特别说明:
##### 4.4.3 getSystemPermissionDenied@getSystemPermissionDenied 除了本章节列出的函数外,android环境下 application 其他上下文方法都可以通过 getAppContext()!.xxx()的方式实现
判断权限是否已经被用户禁止 比如获取app缓存目录:
```ts ```ts
let permission = ["android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"] UTSAndroid.getAppContext()!.getExternalCacheDir()!.getPath()
let denied = UTSAndroid.getSystemPermissionDenied(UTSAndroid.getUniActivity()!, permission)
// 执行结果
[android.permission.ACCESS_FINE_LOCATION, android.permission.ACCESS_FINE_LOCATION]
``` ```
##### 4.4.4 checkSystemPermissionGranted
判断权限是否已经被用户授予 activity 其他上下文方法都可以通过 getUniActivity()!.xxx()的方式实现
比如获取当前activity的顶层View容器
```ts ```ts
let permission = ["android.permission.ACCESS_FINE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"] UTSAndroid.getUniActivity()!.getWindow().getDecorView();
let grant = UTSAndroid.checkSystemPermissionGranted (UTSAndroid.getUniActivity()!, permission)
// 执行结果
false
``` ```
## 5 Kotlin与UTS差异重点介绍 (持续更新) ## 5 Kotlin与UTS差异重点介绍 (持续更新)
通过上面的章节的阅读,至此我们认为你已经掌握了UTS语法,掌握了基本的Kotlin语法,掌握了UTS对于android资源的支持。 通过上面的章节的阅读,至此我们认为你已经掌握了UTS语法,掌握了基本的Kotlin语法,掌握了UTS对于android资源的支持。
......
...@@ -71,6 +71,8 @@ UTSJSONObject.keys(obj).size ...@@ -71,6 +71,8 @@ UTSJSONObject.keys(obj).size
<!-- UTSJSON.UTSJSONObject.assign.compatibility --> <!-- UTSJSON.UTSJSONObject.assign.compatibility -->
>> 注意: 与js中的`Object.assign`不同, 这里每次返回的都是一个新的对象
```ts ```ts
const target = { a: 1, b: 2 }; const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 }; const source = { b: 4, c: 5 };
...@@ -88,6 +90,8 @@ const returnedTarget = UTSJSONObject.assign(target, source); ...@@ -88,6 +90,8 @@ const returnedTarget = UTSJSONObject.assign(target, source);
<!-- UTSJSON.UTSJSONObject.assign_1.compatibility --> <!-- UTSJSON.UTSJSONObject.assign_1.compatibility -->
>> 注意: 与js中的`Object.assign`不同, 这里每次返回的都是一个新的对象
```ts ```ts
type User = { type User = {
a:number a:number
......
...@@ -62,6 +62,12 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -62,6 +62,12 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.onAppActivityPause.compatibility --> <!-- UTSJSON.UTSAndroid.onAppActivityPause.compatibility -->
```ts
UTSAndroid.onAppActivityPause(() => {
let eventName = "onAppActivityPause - " + Date.now();
console.log(eventName);
});
```
### offAppActivityPause ### offAppActivityPause
...@@ -74,6 +80,13 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -74,6 +80,13 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.offAppActivityPause.compatibility --> <!-- UTSJSON.UTSAndroid.offAppActivityPause.compatibility -->
```ts
// 移除全部监听
UTSAndroid.offAppActivityPause();
// 移除指定监听
UTSAndroid.offAppActivityPause(() => {
});
```
### onAppActivityResume ### onAppActivityResume
...@@ -87,6 +100,16 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -87,6 +100,16 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.onAppActivityResume.compatibility --> <!-- UTSJSON.UTSAndroid.onAppActivityResume.compatibility -->
```ts
UTSAndroid.onAppActivityResume(() => {
let eventName = "onAppActivityResume - " + Date.now();
console.log(eventName);
});
```
### offAppActivityResume ### offAppActivityResume
<!-- UTSJSON.UTSAndroid.offAppActivityResume.description --> <!-- UTSJSON.UTSAndroid.offAppActivityResume.description -->
...@@ -99,6 +122,15 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -99,6 +122,15 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
```ts
// 移除全部监听
UTSAndroid.onAppActivityResume();
// 移除指定监听
UTSAndroid.onAppActivityResume(() => {
});
```
### onAppActivityDestroy ### onAppActivityDestroy
<!-- UTSJSON.UTSAndroid.onAppActivityDestroy.description --> <!-- UTSJSON.UTSAndroid.onAppActivityDestroy.description -->
...@@ -109,6 +141,12 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -109,6 +141,12 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.onAppActivityDestroy.compatibility --> <!-- UTSJSON.UTSAndroid.onAppActivityDestroy.compatibility -->
```ts
UTSAndroid.onAppActivityDestroy(() => {
let eventName = "onAppActivityDestroy- " + Date.now();
console.log(eventName);
});
```
### offAppActivityDestroy ### offAppActivityDestroy
...@@ -122,6 +160,14 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -122,6 +160,14 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.offAppActivityDestroy.compatibility --> <!-- UTSJSON.UTSAndroid.offAppActivityDestroy.compatibility -->
```ts
// 移除全部监听
UTSAndroid.offAppActivityDestroy();
// 移除指定监听
UTSAndroid.offAppActivityDestroy(() => {
});
```
### onAppActivityResult ### onAppActivityResult
...@@ -134,6 +180,24 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -134,6 +180,24 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.onAppActivityResult.compatibility --> <!-- UTSJSON.UTSAndroid.onAppActivityResult.compatibility -->
App 的 activity 启动其他activity的回调结果监听 对应原生的 [onActivityResult](https://developer.android.com/training/basics/intents/result)
需要特别注意的是 `requestCode` 参数,这个参数用于区别 不同的请求来源,开发者应该只处理自己发起请求
```ts
let customRequestCode = 12000
UTSAndroid.onAppActivityResult((requestCode: Int, resultCode: Int, data?: Intent) => {
if(requestCode == 12000){
// 我们发起的请求
let eventName = "onAppActivityResult - requestCode:" + requestCode + " -resultCode:"+resultCode + " -data:"+JSON.stringify(data);
console.log(eventName);
}else{
// 别的代码发起的请求,不要处理
}
});
```
### offAppActivityResult ### offAppActivityResult
...@@ -146,6 +210,14 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -146,6 +210,14 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.offAppActivityResult.compatibility --> <!-- UTSJSON.UTSAndroid.offAppActivityResult.compatibility -->
```ts
// 移除全部监听
UTSAndroid.offAppActivityResult();
// 移除指定监听
UTSAndroid.offAppActivityResult(() => {
});
```
### onAppActivityBack ### onAppActivityBack
...@@ -158,6 +230,13 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -158,6 +230,13 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.onAppActivityBack.compatibility --> <!-- UTSJSON.UTSAndroid.onAppActivityBack.compatibility -->
```ts
UTSAndroid.onAppActivityBack(() => {
let eventName = "onAppActivityBack- " + Date.now();
console.log(eventName);
});
```
### offAppActivityBack ### offAppActivityBack
...@@ -170,6 +249,13 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均 ...@@ -170,6 +249,13 @@ app-android平台专有内置对象。在uni-app和uni-app x的uts环境中均
<!-- UTSJSON.UTSAndroid.offAppActivityBack.compatibility --> <!-- UTSJSON.UTSAndroid.offAppActivityBack.compatibility -->
```ts
// 移除全部监听
UTSAndroid.offAppActivityBack();
// 移除指定监听
UTSAndroid.offAppActivityBack(() => {
});
```
### getAppContext() ### getAppContext()
...@@ -242,7 +328,7 @@ if (takePictureIntent.resolveActivity(UTSAndroid.getUniActivity()!.getPackageMan ...@@ -242,7 +328,7 @@ if (takePictureIntent.resolveActivity(UTSAndroid.getUniActivity()!.getPackageMan
```ts ```ts
/** /**
* 代码包文件在真机运行模式下: * 代码包文件在真机运行模式下:
* /storage/emulated/0/Android/data/io.dcloud.uniappx/apps/__UNI__XXXXXXX/www/static/logo.png * /storage/emulated/0/Android/data/io.dcloud.uniappx/apps/__UNI__XXXXXXX/www/static/logo.png
* 代码包文件在云打包模式下: * 代码包文件在云打包模式下:
* file:///android_asset/apps/__UNI__XXXXXXX/www/static/logo.png * file:///android_asset/apps/__UNI__XXXXXXX/www/static/logo.png
* / * /
...@@ -641,7 +727,7 @@ UTSAndroid.gotoSystemPermissionActivity(UTSAndroid.getUniActivity()!,permissionN ...@@ -641,7 +727,7 @@ UTSAndroid.gotoSystemPermissionActivity(UTSAndroid.getUniActivity()!,permissionN
- `uni-app`不支持 - `uni-app`不支持
- [沙盒外文件](../api/file-system-spec.md#%E6%B2%99%E7%9B%92%E5%A4%96%E7%9B%AE%E5%BD%95) - [沙盒外文件](../api/file-system-spec.md#%E6%B2%99%E7%9B%92%E5%A4%96%E7%9B%AE%E5%BD%95)
- 沙盒管理范围外的其他文件。 调用系统API返回的绝对地址属于此类。`uni-app`/`uni-app x`平台 均支持读写 - 沙盒管理范围外的其他文件。 调用系统API返回的绝对地址属于此类。`uni-app`/`uni-app x`平台 均支持读写
::: :::
```ts ```ts
...@@ -758,56 +844,4 @@ console.log(UTSAndroid.getTopPageActivity()) ...@@ -758,56 +844,4 @@ console.log(UTSAndroid.getTopPageActivity())
<!-- UTSJSON.UTSAndroid.offPrivacyAgreeChange.compatibility --> <!-- UTSJSON.UTSAndroid.offPrivacyAgreeChange.compatibility -->
### setAppTheme(theme)
<!-- UTSJSON.UTSAndroid.setAppTheme.description -->
<!-- UTSJSON.UTSAndroid.setAppTheme.param -->
<!-- UTSJSON.UTSAndroid.setAppTheme.returnValue -->
<!-- UTSJSON.UTSAndroid.setAppTheme.compatibility -->
### onAppThemeChanged(callback)
<!-- UTSJSON.UTSAndroid.onAppThemeChanged.description -->
<!-- UTSJSON.UTSAndroid.onAppThemeChanged.param -->
<!-- UTSJSON.UTSAndroid.onAppThemeChanged.returnValue -->
<!-- UTSJSON.UTSAndroid.onAppThemeChanged.compatibility -->
### offAppThemeChanged(callbackId)
<!-- UTSJSON.UTSAndroid.offAppThemeChanged.description -->
<!-- UTSJSON.UTSAndroid.offAppThemeChanged.param -->
<!-- UTSJSON.UTSAndroid.offAppThemeChanged.returnValue -->
<!-- UTSJSON.UTSAndroid.offAppThemeChanged.compatibility -->
### onOsThemeChanged(callback)
<!-- UTSJSON.UTSAndroid.onOsThemeChanged.description -->
<!-- UTSJSON.UTSAndroid.onOsThemeChanged.param -->
<!-- UTSJSON.UTSAndroid.onOsThemeChanged.returnValue -->
<!-- UTSJSON.UTSAndroid.onOsThemeChanged.compatibility -->
### offOsThemeChanged(callbackId)
<!-- UTSJSON.UTSAndroid.offOsThemeChanged.description -->
<!-- UTSJSON.UTSAndroid.offOsThemeChanged.param -->
<!-- UTSJSON.UTSAndroid.offOsThemeChanged.returnValue -->
<!-- UTSJSON.UTSAndroid.offOsThemeChanged.compatibility -->
<!-- UTSJSON.UTSAndroid.tutorial --> <!-- UTSJSON.UTSAndroid.tutorial -->
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册