未验证 提交 b651e4dd 编写于 作者: Z zengyawen 提交者: Gitee

update docs

Signed-off-by: Nzengyawen <zengyawen1@huawei.com>
上级 a5f90cf8
# ArkUI动画/交互事件开发常见问题(ArkTS)
## 焦点事件onBlur/onFocus回调无法触发
适用于 OpenHarmony 3.2 Beta5 API 9
**问题现象**
焦点事件onBlur/onFocus回调无法触发
**解决措施**
焦点事件默认情况下需要外接键盘的Tab键,或方向键触发,点击触发焦点事件需要添加焦点控制属性focusOnTouch。
**参考链接**
[焦点控制](../reference/arkui-ts/ts-universal-attributes-focus.md)
## scroll里面套一个grid,如何禁用grid的滑动事件
适用于 OpenHarmony 3.2 Beta5 API 9
可以通过onScrollFrameBegin事件和scrollBy方法实现容器嵌套滚动。
可参考:[容器嵌套滚动样例](../reference/arkui-ts/ts-container-scroll.md#%E7%A4%BA%E4%BE%8B2)
## 如何实现一个组件不停地旋转
适用于 OpenHarmony 3.2 Beta5 API 9
可以通过[属性动画](../reference/arkui-ts/ts-animatorproperty.md)的方式实现。
## 列表目前无法键盘上下滑动,是否能力不支持
适用于 OpenHarmony 3.2 Beta5 API 9
**解决措施**
有以下两种方案:
1. 需要在列表子项中添加focusable\(true\)进行获焦。
2. 在每个item的外层嵌套一个可获焦组件,例如Button。
## 键盘移动焦点对象按下enter,为什么不会触发点击事件
适用于 OpenHarmony 3.2 Beta5 API 9
组件的内置的点击事件和开发者自定义的onClick点击事件默认会和空格键绑定,并非与enter键绑定(UX规格)。
## 多层组件嵌套button,如何阻止事件传递
适用于 OpenHarmony 3.2 Beta5 API 9
可以通过将button组件绑定参数stopPropagation来控制冒泡传递。
## 使用router或Navigator实现页面跳转时,如何关闭页面间转场动效
适用于 OpenHarmony 3.2 Beta5 API 9
1. 参考[页面间转场示例](../reference/arkui-ts/ts-page-transition-animation.md#示例)在当前页面和目标页面中定义pageTransition方法。
2. 将页面入场组件PageTransitionEnter和页面退场组件PageTransitionExit的动效参数duration都设置为0。
## 在容器组件嵌套的场景下,如何解决手势拖拽事件出现错乱的问题
适用于 OpenHarmony 3.2 Beta5 API 9
PanGesture用于触发拖动手势事件,滑动的最小距离distance默认为5vp时拖动手势识别成功。可以将distance值设为1,使拖动更灵敏,避免造成事件错乱。
**参考链接**
[PanGesture](../reference/arkui-ts/ts-basic-gestures-pangesture.md)
## 基于OpenHarmony开发的应用,是否支持使用fontFamily属性设置不同的字体
适用于:OpenHarmony 3.2 Beta5 API 9
基于OpenHarmony开发的应用,默认字体'HarmonyOS Sans',且当前只支持这种字体。
## 点击输入框时会拉起软键盘,点击button时软键盘关闭要如何实现
适用于 OpenHarmony 3.2 Beta5 API 9
TextInput获取焦点会弹出输入法,失去焦点就会关闭软键盘,使用focusControl控制焦点即可关闭软件盘。
**代码示例**
```
build() {
Column() {
TextInput()
Button(`hide`)
.key('button')
.onClick(()=>{
focusControl.requestFocus('button')
})
}
}
```
## 当父组件绑定了onTouch,其子组件Button绑定了onClick,如何做到点击Button只响应Button的onClick,而不用响应父组件的onTouch?
适用于 OpenHarmony 3.2 Beta5 API 9
可以在Button组件中绑定onTouch,并在onTouch中使用stopPropagation\(\)阻止onTouch冒泡传递到父组件阻止冒泡传递。
**代码示例**
```
build() {
Row() {
Button("点击我")
.width(100)
.width(100)
.backgroundColor('#f00')
.onClick(()=>{
console.log("Button onClick")
})
.onTouch((e) => {
console.log("Button onTouch")
e.stopPropagation()
})
}
.onTouch(() => {
console.log("Row onTouch")
})
}
```
## 绑定菜单后无法使用右键触发菜单
适用于:OpenHarmony 3.2 Beta API 9
**解决措施**
目前菜单仅支持点击、长按触发方式,没有右键方式。
## 点击文本输入框,如何屏蔽系统默认键盘弹起行为?
适用于:OpenHarmony 3.2 Beta5 API 9
设置TextInput组件的focusable属性为false,此组件则不可获焦,就不会拉起系统默认的键盘。
## 如何实现上下切换的页面间跳转动画
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
页面切换时如何实现上下切换动画
**解决措施**
可以使用pageTransition函数来实现页面转场效果,通过PageTransitionEnter和PageTransitionExit指定页面进入和退出的动画效果,将其slide属性设置为SlideEffect.Bottom,则页面入场时从下边划入,出场时滑出到下边,即可实现上下切换效果。
**代码示例**
```
// Index.ets
@Entry
@Component
struct PageTransition1 {
build() {
Stack({alignContent: Alignment.Bottom}) {
Navigator({ target: 'pages/Page1'}) {
Image($r('app.media.ic_banner01')).width('100%').height(200) // 图片存放在media文件夹下
}
}.height('100%').width('100%')
}
pageTransition() {
PageTransitionEnter({ duration: 500, curve: Curve.Linear }).slide(SlideEffect.Bottom)
PageTransitionExit({ duration: 500, curve: Curve.Ease }).slide(SlideEffect.Bottom)
}
}
```
```
// Page1.ets
@Entry
@Component
struct PageTransition2 {
build() {
Stack({alignContent: Alignment.Bottom}) {
Navigator({ target: 'pages/Index'}) {
Image($r('app.media.ic_banner02')).width('100%').height(200) // 图片存放在media文件夹下
}
}.height('100%').width('100%')
}
pageTransition() {
PageTransitionEnter({ duration: 500, curve: Curve.Linear }).slide(SlideEffect.Bottom)
PageTransitionExit({ duration: 500, curve: Curve.Ease }).slide(SlideEffect.Bottom)
}
}
```
**参考链接**
[页面转场动画](https://docs.openharmony.cn/pages/v3.2/zh-cn/application-dev/ui/arkts-page-transition-animation.md/)
## 自定义组件间如何实现从底部滑入滑出的效果
适用于:OpenHarmony 3.2 Beta5 API 9
**问题现象**
一个页面底部默认显示自定义组件A,点击自定义组件A,则A消失,自定义组件B从底部出现;点击自定义组件B,则组件B消失,A从底部出现。这个效果要如何实现?
**解决措施**
可以使用transition产生组件转场动画,其参数type用来设置组件变化场景,包括新增和删除;参数translate用来设置转场时的平移效果。注意transition需要配合animateTo才能生效,动效时长、曲线、延时跟随animateTo中的配置。
**代码示例**
```
@Entry
@Component
struct ComponentTransition {
@State flag: boolean = true;
build() {
Stack({alignContent: Alignment.Bottom}) {
if (this.flag) {
ComponentChild1({ flag: $flag })
.transition({ type: TransitionType.Insert,translate: { x: 0, y: 200 } })
}
if (!this.flag) {
ComponentChild2({ flag: $flag })
.transition({ type: TransitionType.Insert, translate: { x: 0, y: 200 } })
}
}.height('100%').width('100%')
}
}
@Component
struct ComponentChild1 {
@Link flag: boolean
build() {
Column() {
Image($r('app.media.ic_banner01'))
.width('100%')
.height(200)
.onClick(() => {
animateTo({ duration: 1000 }, () => {
this.flag = !this.flag;
})
})
}
}
}
@Component
struct ComponentChild2 {
@Link flag: boolean
build() {
Column() {
Image($r('app.media.ic_banner02'))
.width('100%')
.height(200)
.onClick(() => {
animateTo({ duration: 1000 }, () => {
this.flag = !this.flag;
})
})
}
}
}
```
**参考链接**
[组件内转场动画](https://docs.openharmony.cn/pages/v3.2/zh-cn/application-dev/ui/arkts-transition-animation-within-component.md/)
# ArkUI开发框架(ArkTS语法)
# ArkTS语法使用常见问题
## ArkUI如何通过代码动态创建组件
......
# ArkUI框架开发常见问题(JS)
## 用数组变量控制组件属性不生效
适用于:OpenHarmony,IDE 3.0.0.993,API 8
目前类web范式对数组中元素的修改不会被监听,因此不会触发页面刷新 ,需要产生数组对象的修改才可以触发页面刷新。所以,使用test1\(\)对修改数组的引用时,button组件会被禁用,使用test2\(\)修改数组中某个元素,对控制button组件disabled属性的数组单元赋值,button组件并不会被禁用。除了test1\(\)中对数组整体赋值,我们还可以使用修改数组的方法,如splice\(\),也可以达到页面刷新的效果。
```
test1() {this.isDisabled = [true, true, true, true, true]; //该语句可实现对button组件的禁用
test2() {this.isDisabled[0] = true; //该语句对button组件的禁用不生效
```
## input组件是否支持设置文本居中对齐
适用于:OpenHarmony 3.2 Beta5 API 9 FA模型
**问题现象**
input组件中输入的文本如何实现文本居中对齐格式,使用text-align没有效果。
**解决措施**
input组件属于类web范式组件,不_支_持设置文本对齐方式,text-align样式只针对text组件生效。
**参考链接**
[input组件](../reference/arkui-js/js-components-basic-input.md)[text组件](../reference/arkui-js/js-components-basic-text.md)
## 如何判断JS对象中是否存在某个值
适用于:OpenHarmony 3.2 Release API 9
**解决措施**
Object.values\(对象名\).indexOf\(想要判断的值\),若返回-1表示不包含对应值,返回值不等于-1则表示包含。
\ No newline at end of file
# ArkUI布局开发常见问题(ArkTS)
## 使用position之后height不生效
适用于 OpenHarmony 3.2 Beta5 API 9
**解决措施**
容器组件在使用position之后会脱离文本流,导致容器脱离外层容器束缚,导致height不生效,可以将外层容器换成Stack可以解决这个问题。
## Grid组件如何实现横向滚动
适用于 OpenHarmony 3.2 Beta5 API 9
将Grid组件设置当前网格布局行数rowsTemplate且不设置列数,当内容超出Grid组件宽度时,Grid可横向滚动进行内容展示。
## List组件与其他组件并列使用时,若未设置List滚动方向上的尺寸,无法拖动到底部
适用于 OpenHarmony 3.2 Beta5 API 9
给List加上layoutWeight属性,设置列表自适应占满剩余高度。原理:List属于可滚动容器组件,默认高度是占满全屏幕高度,当出现其他固定高度的组件占领了屏幕的部分高度时,需要开发人员显性的指定List组件占满剩余高度,而不是全屏幕高度。
## Tabs组件在点击Tab项时是否支持禁止切换
适用于 OpenHarmony 3.2 Release API 9
不支持。
## 如何拦截住onBackPress事件,不触发页面返回
适用于 OpenHarmony 3.2 Release API 9
在onBackPress中返回true表示页面自己处理返回逻辑,不会执行默认的返回逻辑。
可参考[自定义组件的生命周期-onBackPress](../reference/arkui-ts/ts-custom-component-lifecycle.md#onbackpress)
## List组件怎么实现分组列表的粘性标题效果
适用于 OpenHarmony 3.2 Release API 9
可以通过List组件的sticky属性配合ListItemGroup组件来实现。通过给List组件设置sticky属性为StickyStyle.Header,设置ListItemGroup中header参数对应的头部组件呈现粘性标题效果
可参考:[创建列表-添加粘性标题](../ui/arkts-layout-development-create-list.md#添加粘性标题)
# ArkUI路由/导航开发常见问题(ArkTS)
## router中params无法正常传递class对象
适用于:OpenHarmony 3.2 Beta5 ,API 9 Stage模型
只能传递对象中的属性,无法传递对象中的方法。
## 在Stage模型下,如何通过router实现页面跳转
适用于:OpenHarmony 3.2 Beta5 ,API 9 Stage模型
1. 对于通过页面路由router实现页面跳转,首先要在main\_pages.json配置文件中将所有跳转的页面加入pages列表;
2. 页面路由需要在页面渲染完成之后才能调用,在onInit和onReady生命周期中页面还处于渲染阶段,禁止调用页面路由方法。
**参考链接:**[页面路由](../reference/apis/js-apis-router.md)
## router通过调用push方法进堆栈的page是否会被回收
适用于:OpenHarmony 3.2 Beta5 ,API 9 Stage模型
调用push进入堆栈的page不回收,调用back方法出栈后可以被回收。
**参考链接:**[Router传递参数](../reference/apis/js-apis-router.md#routergetparams)
# Native API
Native API是OHOS SDK上提供的一组native开发接口与工具集合,方便开发者使用C或者C++语言实现应用的关键功能。Native API只覆盖了OHOS基础的一些底层能力,如libc,图形库,窗口系统,多媒体,压缩库等,并没有完全提供类似于JS API上的完整的OHOS 平台能力。在应用中使用Native API会编译成动态库打包到应用中。
<br/>
## Native API构成介绍
### Native API目录结构
Native API在SDK包的位置为$(SDK_ROOT)/native目录,主要有以下几个部分组成
|目录|功能说明|
|--|--|
|build|应用中编译动态库的toolchain cmake脚本;这个目录下ohos.toolchain.cmake文件定义了给OHOS交叉编译选项|
|build-tools|放置编译构建的工具,如cmake|
|docs|Native API接口参考文档,通过doxgen从头文件中提取出来|
|llvm|支持OHOS ABI的llvm交叉编译器|
|sysroot|放置编译链接的依赖文件目录,包含头文件,动态库等|
<br/>
### Native API接口
|接口分类|接口功能|引入版本|
|--|--|--|
|标准C库|以musl为基础提供的标准c库接口,当前提供了1500+的接口|8|
|标准C++库|c++运行时库libc++_shared,此库在打包的时候需要打包或者静态链接到应用中|8|
|日志|打印日志到系统的hilog接口|8|
|napi|ArkUI提供的,方便应用开发接入JS应用环境的一组类Node-API,是属于Native API的一部分|8|
|XComponent|ArkUI XComponent组件中的surface与触屏事件接口,方便开发者开发高性能图形应用|8|
|libuv|ArkUI集成的三方的异步IO库|8|
|libz|zlib库,提供基本的压缩,解压接口|8|
|Drawing|系统提供的2D图形库,可以在surface进行绘制|8|
|OpenGL|系统提供的openglv3接口|8|
|Rawfile|应用资源访问接口,可以读取应用中打包的各种资源|8|
|OpenSLES|用于2D,3D音频加速的接口库|8|
|Mindspore|AI模型接口库|9|
|包管理|包服务接口,方便查询应用包信息|8|
Native API中有一部分接口采用开源标准,详细列表见《[Native API中支持的标准库](https://docs.openharmony.cn/pages/v3.1/zh-cn/application-dev/reference/native-lib/third_party_libc/musl.md/)》《[Node_API](https://docs.openharmony.cn/pages/v3.1/zh-cn/application-dev/reference/native-lib/third_party_napi/napi.md/)
## 使用介绍
<br/>
### 建议使用Native API的场景
主要有如下一些
1. 应用性能敏感代码,比如游戏,物理模拟等计算密集型场景
2. 需要复用已有的C或C++库
3. 需要针对CPU特性进行专项定制的库,如neon加速
<br/>
### 不建议使用Native API的场景
1. 写一个纯native的的OHOS应用
2. 希望在尽可能多的OHOS设备上保持兼容的应用
<br/>
# Native API的相关指导
- [Native API hello world]()
- 本例子引导开发者开发一个hello的Native API库,在ts界面上显示出从hello库中获取的字符串
- [Native API介绍](introduction.md)
- [Native API在应用工程中的使用指导](napi-guidelines.md)
- 介绍如何使用各种napi接口与js中的模块,接口,异步任务进行互操作
- [Drawing开发指导](drawing-guidelines.md)
- [Rawfile开发指导](rawfile-guidelines.md)
- [NativeWindow开发指导](native-window-guidelines.md)
......
# Native API 介绍
Native API是OHOS SDK上提供的一组native开发接口与工具集合,方便开发者使用C或者C++语言实现应用的关键功能。Native API只覆盖了OHOS基础的一些底层能力,如libc,图形库,窗口系统,多媒体,压缩库等,并没有完全提供类似于JS API上的完整的OHOS 平台能力。在应用中使用Native API会编译成动态库打包到应用中。
## Native API构成介绍
### Native API目录结构
Native API在SDK包的位置为$(SDK_ROOT)/native目录,主要有以下几个部分组成
|目录|功能说明|
|--|--|
|build|应用中编译动态库的toolchain cmake脚本;这个目录下ohos.toolchain.cmake文件定义了给OHOS交叉编译选项|
|build-tools|放置编译构建的工具,如cmake|
|docs|Native API接口参考文档,通过doxgen从头文件中提取出来|
|llvm|支持OHOS ABI的llvm交叉编译器|
|sysroot|放置编译链接的依赖文件目录,包含头文件,动态库等|
### Native API接口
|接口分类|接口功能|引入版本|
|--|--|--|
|标准C库|以musl为基础提供的标准c库接口,当前提供了1500+的接口|8|
|标准C++库|c++运行时库libc++_shared,此库在打包的时候需要打包或者静态链接到应用中|8|
|日志|打印日志到系统的hilog接口|8|
|napi|ArkUI提供的,方便应用开发接入JS应用环境的一组类Node-API,是属于Native API的一部分|8|
|XComponent|ArkUI XComponent组件中的surface与触屏事件接口,方便开发者开发高性能图形应用|8|
|libuv|ArkUI集成的三方的异步IO库|8|
|libz|zlib库,提供基本的压缩,解压接口|8|
|Drawing|系统提供的2D图形库,可以在surface进行绘制|8|
|OpenGL|系统提供的openglv3接口|8|
|Rawfile|应用资源访问接口,可以读取应用中打包的各种资源|8|
|OpenSLES|用于2D,3D音频加速的接口库|8|
|Mindspore|AI模型接口库|9|
|包管理|包服务接口,方便查询应用包信息|8|
Native API中有一部分接口采用开源标准,详细列表见《[Native API中支持的标准库](../reference/native-lib/third_party_libc/musl.md)》《[Node_API](../reference/native-lib/third_party_napi/napi.md)
## 使用介绍
### 建议使用Native API的场景
主要有如下一些
1. 应用性能敏感代码,比如游戏,物理模拟等计算密集型场景
2. 需要复用已有的C或C++库
3. 需要针对CPU特性进行专项定制的库,如neon加速
### 不建议使用Native API的场景
1. 写一个纯native的的OHOS应用
2. 希望在尽可能多的OHOS设备上保持兼容的应用
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册