diff --git a/zh-cn/application-dev/Readme-CN.md b/zh-cn/application-dev/Readme-CN.md index 19b9ca337e53338101d7d995f08865062ed8b290..1a4154f39bced155b5593397d374c154f043936b 100644 --- a/zh-cn/application-dev/Readme-CN.md +++ b/zh-cn/application-dev/Readme-CN.md @@ -49,6 +49,7 @@ - [Native API参考](reference/native-apis/Readme-CN.md) - [标准库](reference/native-lib/third_party_libc/musl.md) - [Node_API](reference/native-lib/third_party_napi/napi.md) +- [常见问题](faqs/Readme-CN.md) - 贡献 - [参与贡献](../contribute/贡献文档.md) diff --git a/zh-cn/application-dev/faqs/Readme-CN.md b/zh-cn/application-dev/faqs/Readme-CN.md new file mode 100644 index 0000000000000000000000000000000000000000..7eeb2c756aed17a3bb8ddbdfd5a30e0bef9e9513 --- /dev/null +++ b/zh-cn/application-dev/faqs/Readme-CN.md @@ -0,0 +1,15 @@ +# 常见问题 + +- [Ability框架开发常见问题](faqs-ability.md) +- [UI框架(JS)开发常见问题](faqs-ui-js.md) +- [UI框架(eTS)开发常见问题](faqs-ui-ets.md) +- [图形图像开发常见问题](faqs-graphics.md) +- [文件管理开发常见问题](faqs-file-management.md) +- [网络与连接开发常见问题](faqs-connectivity.md) +- [数据管理开发常见问题](faqs-data-management.md) +- [设备管理开发常见问题](faqs-device-management.md) +- [Native API使用常见问题](faqs-native.md) +- [三四方库使用常见问题](faqs-third-party-library.md) +- [IDE使用常见问题](faqs-ide.md) +- [hdc_std命令使用常见问题](faqs-hdc-std.md) +- [开发板](faqs-development-board.md) diff --git a/zh-cn/application-dev/faqs/faqs-ability.md b/zh-cn/application-dev/faqs/faqs-ability.md new file mode 100644 index 0000000000000000000000000000000000000000..ffc4e0123da0ff228305bee962807bd279193acd --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-ability.md @@ -0,0 +1,62 @@ +# Ability框架开发常见问题 + + + +## Stage模型中是否有类似FA模型的DataAbility的开发指导文档 + +适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 + +Stage模型中DataShareExtensionAbility提供了向其他应用共享以及管理其数据的方法。 + +参考文档:[数据共享开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/database/database-datashare-guidelines.md) + +## 拉起Ability为什么在界面上没反应? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +1. 如果是通过startAbility的方式拉起,检查want中abilityName字段是否携带了bundleName做前缀,如果有,请删除; + +2. 检查MainAbility.ts文件中onWindowStageCreate方法配置的Ability首页文件是否在main_pages.json中有定义,如果没有定义,请补齐; + +3. SDK和OpenHarmony SDK系统推荐同一天的版本。 + +参考文档:[OpenHarmony版本转测试信息](https://gitee.com/openharmony-sig/oh-inner-release-management/blob/master/Release-Testing-Version.md) + +## 调用方法的时候,如何解决方法内部的this变成undefined? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +方式一:在调用方法的时候加上.bind(this); + +方式二:使用箭头函数。 + +## 如何解决must have required property 'startWindowIcon'报错 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +Ability配置中缺少startWindowIcon属性配置,需要在module.json5中abilities中配置startWindowIcon。 + +参考文档:[Stage模型配置文件](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/stage-structure.md) + + 示例: + +``` +{ + "module": { + // do something + "abilities": [{ + // do something + "startWindowIcon": "$media:space", + "startWindowBackground": "$color:white", + }] + } +} +``` + +## 如何获取设备横竖屏的状态变化的通知 + +适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 + +使用Ability的onConfigurationUpdated回调实现,系统语言、颜色模式以及Display相关的参数,比如方向、Density,发生变化时触发该回调。 + +参考文档:[Ability开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/stage-ability.md) diff --git a/zh-cn/application-dev/faqs/faqs-connectivity.md b/zh-cn/application-dev/faqs/faqs-connectivity.md new file mode 100644 index 0000000000000000000000000000000000000000..8690d9c205472b021b38799bf519fdde37a87aa9 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-connectivity.md @@ -0,0 +1,31 @@ +# 网络与连接开发常见问题 + + + +## Post请求时,extraData支持哪几种的数据格式? + +适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型 + +extraData代表发送请求的额外数据,支持如下数据: + +1. 当HTTP请求为POST、PUT方法时,此字段为HTTP请求的content。 + +2. 当HTTP请求为GET、OPTIONS、DELETE、TRACE、CONNECT方法时,此字段为HTTP请求的参数补充,参数内容会拼接到URL中进行发送。 + +3. 开发者传入string对象,开发者需要自行编码,将编码后的string传入。 + +## 如何理解http请求的错误码28? + +适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 + +错误码28代表CURLE_OPERATION_TIMEDOUT 。网络请求底层使用libcurl库,更多错误码可以查看相应文档。 + +参考文档:[开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-http.md#response%E5%B8%B8%E7%94%A8%E9%94%99%E8%AF%AF%E7%A0%81)和[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html) + +## \@ohos.net.http.d.ts的response错误码返回6是什么意思? + +适用于:OpenHarmony SDK 3.2.3.5版本 + +6表示地址无法解析主机,可以尝试ping一下request中的url,确认是否可以ping通。 + +更多错误码参考[Response常用错误码](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-http.md#response%E5%B8%B8%E7%94%A8%E9%94%99%E8%AF%AF%E7%A0%81)或者[Curl错误码](https://curl.se/libcurl/c/libcurl-errors.html) diff --git a/zh-cn/application-dev/faqs/faqs-data-management.md b/zh-cn/application-dev/faqs/faqs-data-management.md new file mode 100644 index 0000000000000000000000000000000000000000..bdeef869a7c52819b9634b1d5a4432d41c20118c --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-data-management.md @@ -0,0 +1,24 @@ +# 数据管理开发常见问题 + + + +## 如何将PixelMap的数据存储到数据库中。 + +适用于:OpenHarmony SDK 3.2.3.5版本 + +PixelMap应该被转换成相应的ArrayBuffer再放进数据库。 + +参考文档:[readPixelsToBuffer](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-image.md#readpixelstobuffer7-1) + +## 如何获取rdb关系型数据库文件 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +开发者可使用hdc_std命令拷贝文件,其中文件路径为: /data/app/el2/100/database/包名/entry/db/ ,然后拷贝该路径下后缀为 .db、.db-shm、.db-wal的文件,拷贝完成后,可以通过SQLite工具打开该数据库文件。 + +示例: + + +``` + hdc_std file recv /data/app/el2/100/database/com.xxxx.xxxx/entry/db/test.db ./test.db +``` diff --git a/zh-cn/application-dev/faqs/faqs-development-board.md b/zh-cn/application-dev/faqs/faqs-development-board.md new file mode 100644 index 0000000000000000000000000000000000000000..3ab491c0dc6b42b0ca2e91e7a55965f51f9d34ad --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-development-board.md @@ -0,0 +1,51 @@ +# 开发板 + + + +## 如何获取开发板上截屏图片? + +适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 + +- 方法一:点击开发板下拉控制中心的截屏按钮,截屏图片通过相册可以查看。 + +- 方法二:通过截屏脚本一键截屏,可以在电脑上查看。操作方法:Windows上连接开发板,然后电脑上新建文本文件,拷贝如下脚本内容,文件名后缀改为.bat文件(需要提前配置好hdc的环境变量),点击运行后,截屏图片与脚本在同一目录。 + 示例: + + + ``` + set filepath=/data/%date:~0,4%%date:~5,2%%date:~8,2%%time:~1,1%%time:~3,2%%time:~6,2%.png + echo %filepath% + : pause + hdc_std shell snapshot_display -f %filepath% + : pause + hdc_std file recv %filepath% . + : pause + ``` + +## RK3568板子和previewer上展示的效果差异较大,如何把previewer的尺寸调整成实际板子一样。 + +适用于:IDE 3.0.0.991 + +1. 给预览器新建Profile + ![zh-cn_image_0000001361254285](figures/zh-cn_image_0000001361254285.png) + +2. 新建Profile的具体参数可参考如下配置: + Device type : default + + Resolution: 720\*1280 + + DPI: 240 + +## 开发板安装驱动后设备仍然无法识别,设备管理器错误识别为其他设备:FT232R USB UART () + +可能原因:开发版的USB串口驱动没有安装。 + +解决办法:搜索FT232R USB UART确定,下载安装驱动即可。 + +## 在开发板上登录需要认证网络如何进行认证 + +适用于:OpenHarmony SDK 3.2.2.5版本 + +连接需要认证的网络后,用浏览器打开任意网址就可以进入认证页面。 + +如果开发板上没有浏览器,可以安装[浏览器Sample应用](https://gitee.com/openharmony/app_samples/tree/master/device/Browser)。 diff --git a/zh-cn/application-dev/faqs/faqs-device-management.md b/zh-cn/application-dev/faqs/faqs-device-management.md new file mode 100644 index 0000000000000000000000000000000000000000..b5bac9f878fb9e5bbe7732479e97c478df7dfc5d --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-device-management.md @@ -0,0 +1,24 @@ +# 设备管理开发常见问题 + + + +## 如何获取设备的dpi值 + +适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 + +导入@ohos.display包,通过getDefaultDisplay方法获取。 + +示例: + + +``` +import display from '@ohos.display'; +display.getDefaultDisplay((err, data) => { + if (err.code) { + console.error('Test Failed to obtain the default display object. Code: ' + JSON.stringify(err)); + return; + } + console.info('Test Succeeded in obtaining the default display object. Data:' + JSON.stringify(data)); + console.info('Test densityDPI:' + JSON.stringify(data.densityDPI)); +});https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-device-info.md) +``` diff --git a/zh-cn/application-dev/faqs/faqs-file-management.md b/zh-cn/application-dev/faqs/faqs-file-management.md new file mode 100644 index 0000000000000000000000000000000000000000..a6caa4a7064430e4b0c2a2fb49523a8a433ec564 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-file-management.md @@ -0,0 +1,36 @@ +# 文件管理开发常见问题 + + + +## 调用媒体库getAlbums方法,没有收到返回,也没有捕获到异常是为什么 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +getAlbums方法需要权限:ohos.permission.READ_MEDIA,从[OpenHarmony权限定义列表](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/security/permission-list.md)查询知道ohos.permission.READ_MEDIA权限是需要用户授权。 + +1. 在module.json5中配置权限: + + ``` + "requestPermissions": [ + { + "name": "ohos.permission.READ_MEDIA" + } + ] + ``` + +2. 在MainAbility.ts -> onWindowStageCreate页面加载前需要增加用户授权代码: + + ``` + private requestPermissions() { + let permissionList: Array = [ + "ohos.permission.READ_MEDIA" + ]; + this.context.requestPermissionsFromUser(permissionList) + .then(data => { + console.info(`request permission data result = ${data.authResults}`) + }) + .catch(err => { + console.error(`fail to request permission error:${err}`) + }) + } + ``` diff --git a/zh-cn/application-dev/faqs/faqs-graphics.md b/zh-cn/application-dev/faqs/faqs-graphics.md new file mode 100644 index 0000000000000000000000000000000000000000..f72711aefb13db79150b749d9a3e6ed470597d0c --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-graphics.md @@ -0,0 +1,15 @@ +# 图形图像开发常见问题 + + + +## 调用window实例的setSystemBarProperties接口时,设置isStatusBarLightIcon和isNavigationBarLightIcon属性不生效 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +状态栏字体高亮属性的本质就只是让字体变成白色。调用window实例的setSystemBarProperties接口时,如果设置了状态栏内容颜色statusBarContentColor,就以开发者设置的颜色为准,isStatusBarLightIcon状态栏字体高亮属性就不生效;同理,如果设置了导航栏内容颜色navigationBarContentColor,isNavigationBarLightIcon导航栏字体高亮属性就不生效。 + +## 如何设置系统状态栏样式 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +导入\@ohos.window模块,开发者可以使用window.setSystemBarProperties()接口设置状态栏样式属性,达到自定义样式的效果。 diff --git a/zh-cn/application-dev/faqs/faqs-hdc-std.md b/zh-cn/application-dev/faqs/faqs-hdc-std.md new file mode 100644 index 0000000000000000000000000000000000000000..90f627289b2fcefa4d9e62d23249f22ed7e597c2 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-hdc-std.md @@ -0,0 +1,63 @@ +# hdc_std命令使用常见问题 + + + +## 日志的常用命令 + +适用于:OpenHarmony SDK 3.2.2.5版本 + +清理日志:hdc_std shell hilog -r + +调大缓存到20M:hdc_std shell hilog -G 20M + +抓取日志:hdc_std shell hilog > log.txt + +## 日志限流怎么规避 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +- 关闭日志限流 hdc_std shell hilog -Q pidoff + +- 关闭隐私标志 hdc_std shell hilog -p off + +- 增加日志buffer hdc_std shell hilog -G 200M + +- 关闭全局日志,只打开自己领域的日志 hdc_std shell hilog –b D –D 0xd0xxxxx + +执行完命令后重启DevEco Studio。 + +## 应用如何打印日志是使用hilog还是console,hilog接口参数domain的设置范围是什么? + +适用于:OpenHarmony SDK 3.2.2.5版本 + +推荐使用[hilog日志系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-hilog.md)进行日志打印,接口参数domain的设置范围可以参考[开发指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-hilog.md#hilogisloggable)。 + +## hilog日志打印长度限制是多少,是否可以配置 + +适用于:OpenHarmony SDK 3.2.2.5版本 + +日志打印的长度限制为1024,该长度不能配置。 + +## 为什么有时候直接用IDE安装HAP包到开发板上无法打开? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +请检查sdk和开发板烧录的系统版本是否一致,推荐取同一天的sdk和系统版本。 + +## 如何通过hdc命令上传文件 + +适用于:OpenHarmony SDK 3.2.2.5版本 + +可以使用hdc_std file send上传文件。 + +## 如何让RK3568开发板不熄屏? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +输入命令hdc_std shell "power-shell setmode 602" + +## 如何通过命令启动Ability? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +输入命令hdc_std shell aa start -a AbilityName -b bundleName -m moduleName diff --git a/zh-cn/application-dev/faqs/faqs-ide.md b/zh-cn/application-dev/faqs/faqs-ide.md new file mode 100644 index 0000000000000000000000000000000000000000..c9b32df07511cccbb9c1607d5bb121b635372457 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-ide.md @@ -0,0 +1,19 @@ +# IDE使用常见问题 + + + +## 如何解决报错“npm ERR! code SELF_SIGNED_CERT_IN_CHAIN”? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +1. 在Dev Eco Studio terminal中执行npm config set strict-ssl=false; + +2. 在Dev Eco Studio terminal中执行npm install。 + +## 手工更新DevEco的SDK后,编译HAP报错“Cannot find module 'xxx\ets\x.x.x.x\build-tools\ets-loader\node_modules\webpack\bin\webpack.js'” + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +1. 到SDK的ets\x.x.x.x\build-tools\ets-loader目录下执行npm install; + +2. 到SDK的js\x.x.x.x\build-tools\ace-loader目录下执行npm install。 完成步骤后重新编辑既可。 diff --git a/zh-cn/application-dev/faqs/faqs-native.md b/zh-cn/application-dev/faqs/faqs-native.md new file mode 100644 index 0000000000000000000000000000000000000000..cbf66a518dc8e55090fceb0b4d3858c22c814703 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-native.md @@ -0,0 +1,57 @@ +# Native API使用常见问题 + + + +## 运行Native HAP的时候,导入的命名空间报错Obj is not a valid object + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +检查模块根目录(注意不是工程根目录)下的build-profile.json5文件,如果设备是32位,需要在abiFilters参数中配置armeabi-v7a,如果设备是64位,需要在abiFilters参数中配置arm64-v8a。 + +## NAPI开发的C++代码中,如何获取到模块 package.json 文件中的 “version” 值? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +1. 在编译工具Hvigor脚本文件hvigorfile.js中,通过subModule.getPackageJsonPath方法获取module中package.json文件位置; + +2. 使用nodejs能力读取package.json文件中version字段,写入build-profile.json5文件buildOption.cppFlags字段; + +示例: + + +``` +// module hvigorfile.js +const subModule = require('@ohos/hvigor')(__filename) + +const fs = require("fs-extra") +const path = require("path") + +const packageJsonPath = subModule.getPackageJsonPath() +const buildProfilePath = path.resolve(packageJsonPath, '../build-profile.json5') +const packageJsonData = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) +let buildProfileData = fs.readFileSync(buildProfilePath, 'utf8') +buildProfileData = buildProfileData.replace(/\"cppFlags\"\:(.*)\,/, `"cppFlags": "-D NWEBEX_VERSION=${packageJsonData.version}",`) +fs.writeFileSync(buildProfilePath, buildProfileData, 'utf8') + +const ohosPlugin = require('@ohos/hvigor-ohos-plugin').hapTasks(subModule) // 该插件执行了C++编译任务,读取了build-profile.json5文件 + +module.exports = { + ohos: ohosPlugin +} +``` + + +``` +// hellp.cpp 读取 +#define _NWEBEX_VERSION(v) #v +#define _NWEBEX_VER2STR(v) _NWEBEX_VERSION(v) + +static napi_value Add(napi_env env, napi_callback_info info) +{ + + napi_value fixed_version_value = nullptr; + napi_create_string_utf8(env, _NWEBEX_VER2STR(NWEBEX_VERSION), NAPI_AUTO_LENGTH, &fixed_version_value); + + return fixed_version_value; +} +``` diff --git a/zh-cn/application-dev/faqs/faqs-third-party-library.md b/zh-cn/application-dev/faqs/faqs-third-party-library.md new file mode 100644 index 0000000000000000000000000000000000000000..758305d4aca128e8d39001b2176c3f820f2302e2 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-third-party-library.md @@ -0,0 +1,9 @@ +# 三四方库使用常见问题 + + + +## 报错“Stage model module … does not support including OpenHarmony npm packages or modules in FA model. OpenHarmony build tasks will not be executed, and OpenHarmony resources will not be packed. ”是什么意思? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +三四方件未适配API9 Stage模型,无法使用。 diff --git a/zh-cn/application-dev/faqs/faqs-ui-ets.md b/zh-cn/application-dev/faqs/faqs-ui-ets.md new file mode 100644 index 0000000000000000000000000000000000000000..cd53f334c0463202a548a20158e27318923230b3 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-ui-ets.md @@ -0,0 +1,282 @@ +# UI框架(eTS)开发常见问题 + + + +## TS语言在生成器函数中编译失败,有哪些使用限制? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +TS语言的使用在生成器函数中存在以下限制: + +- 表达式仅允许在字符串(${expression})、if条件、ForEach的参数和组件的参数中使用; + +- 这些表达式中的任何一个都不能导致任何应用程序状态变量(\@State、\@Link、\@Prop)的改变,否则会导致未定义和潜在不稳定的框架行为; + +- 生成器函数内部不能有局部变量。 + +上述限制都不适用于事件处理函数(例如onClick)的匿名函数实现。 + +错误示例: + + +``` +build() { + let a: number = 1 // invalid: variable declaration not allowed + Column() { + Text('Hello ${this.myName.toUpperCase()}') // ok. + ForEach(this.arr.reverse(), ..., ...) // invalid: Array.reverse modifies the @State array varible in place + } + buildSpecial() // invalid: no function calls + Text(this.calcTextValue()) // this function call is ok. +} +``` + +## 在Stage模型下,如何通过router实现页面跳转 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +1. 对于通过页面路由router实现页面跳转,首先要在main_pages.json配置文件中将所有跳转的页面加入pages列表; + +2. 页面路由需要在页面渲染完成之后才能调用,在onInit和onReady生命周期中页面还处于渲染阶段,禁止调用页面路由方法。 + +## router通过调用push方法进堆栈的page是否会被回收 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +调用push进入堆栈的page不回收,调用back方法出栈后可以被回收。 + +## 如何动态替换掉资源文件中的“%s”占位符 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +在应用中,通过"$r('app.string.xx')"的形式引用应用资源,$r的第二个参数可用于替换%s占位符。 + + 示例: + +``` +build() { + //do something + //引用的string资源,$r的第二个参数用于替换%s + Text($r('app.string.entry_desc','aaa')) + .fontSize(100) + .fontColor(Color.Black) + //do something +} +``` + +## 如何读取Resource中的xml文件并转化为String类型 + +适用于:OpenHarmony SDK 3.2.2.5版本, API9 Stage模型 + +1. 通过resourceManager的RawFile接口获取Uint8Array格式数据。 + +2. 通过String.fromCharCode将Uint8Array格式数据转化为String类型。 + +参考文档:[资源管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-resource-manager.md) + +示例: + + +``` +resourceManager.getRawFile(path, (error, value) => { + if (error != null) { + console.log("error is " + error); + } else { + let rawFile = value; + let xml = String.fromCharCode.apply(null, rawFile) + } +}); +``` + +## 如何将Resource资源对象转成string类型 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +通过\@ohos.resourceManager模块 resourceManager.getString()方法获取字符串。 + +参考文档:[资源管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-resource-manager.md#getstring) + +## class全局静态变量无法使用的问题 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +Page和Ability打包后会对import的对象分别形成两个不同的闭包,即打包出两个Global对象。因此,所引用的静态变量并不是同一对象,所以无法通过class静态变量方式定义全局变量。建议使用AppStorage进行全局变量管理。 + +参考文档:[应用程序的数据存储](https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/ui/ts-application-states-appstorage.md/) + +## Stage模型下如何获取资源 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +Stage模型支持了通过context获取resourceManager对象的方式,再调用其内部获取资源的接口,无需再导入包,此方式FA模型不适用。 + +示例: + + +``` +const context = getContext(this) as any +context + .resourceManager + .getString($r('app.string.entry_desc').id) + .then(value => { + this.message = value.toString() +}) +``` + +## 如何将容器定位到屏幕的最底部? + +适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 + +可以使用Stack堆叠容器,设置子组件在容器内的最底部。 + + 示例: + +``` +build() { + Stack({alignContent : Alignment.Bottom}) { + //容器位于最底部 + Stack() { + Column() + .width('100%') + .height('100%') + .backgroundColor(Color.Yellow) + } + .width('100%') + .height('10%') + } + .width('100%') + .height('100%') + .backgroundColor('rgba(255,255,255, 0)') +} +``` + +## CustomDialog是否支持在TS文件中使用? + +适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 + +不支持,CustomDialog当前只支持在eTS的Page中使用。 + +参考文档:[自定义弹窗](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-methods-custom-dialog-box.md) + +## 如何将CustomDialog中的变量传递给Page页面中的变量? + +适用于:OpenHarmony SDK 3.2.2.5版本,API9 Stage模型 + +利用自定义的回调函数,当点击弹窗的confirm按钮时,将data数据从自定义弹窗组件中传递给当前的page的页面。 + +示例: + + +``` +// CustomDialog 组件 +@CustomDialog +struct MyDialog { + controller: CustomDialogController + title: string + data: string + cancel: () => void + confirm: (data: string) => void + Button('confirm') + .onClick(() => { + this.controller.close() + this.data = 'test' + this.confirm(this.data) + }).backgroundColor(0xffffff).fontColor(Color.Red) +// Page页面 +@Entry +@Component +struct DialogTest { + dialogController: CustomDialogController = new CustomDialogController({ + builder: MyDialog({ title:'标题自定义',cancel: this.onCancel, + confirm: this.onAccept.bind(this) }), // 绑定自定义的回调函数 + cancel: this.existApp, + autoCancel: true + }) + onAccept(data:string) { + console.info('Callback when the second button is clicked ' + data) + } +} +``` + +## List组件上添加了Text组件后,List组件无法拖动到底部 + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +在List的父容器加上代码layoutWeight(1)。原理:List属于可滚动容器组件,默认高度是占满全屏幕高度,当出现其他固定高度的组件占领了屏幕的部分高度时,需要开发人员显性的指定List组件占满剩余高度,而不是全屏幕高度。 + +## 栅格布局子组件如何居中? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +GridContainer内子组件默认水平左对齐,居中显示可以参考以下处理方式: + +内部嵌套布局组件Row,设置Row属性justifyContent(FlexAlign.Center),内部嵌套子组件可保持居中显示,参考[栅格布局](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ui/ui-ts-layout-grid-container.md)文档。 + + 示例: + +``` +GridContainer({ sizeType: SizeType.SM, columns: 12 }) { + Row() { + Text('1') + .useSizeType({ + sm: { span: 4, offset: 0 }, + }) + .backgroundColor(0x46F2B4) + }.justifyContent(FlexAlign.Center) // 该属性设置使子组件居中显示 +} +``` + +## 如何获取状态栏和导航栏高度? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +在加载窗口内容之前,采用systemAvoidAreaChange事件监听。 + + 示例: + +``` +// MainAbility.ts +import window from '@ohos.window'; + +/** + * 设置沉浸式窗口,并获取状态栏和导航栏高度 + * @param mainWindow 主窗口对象 + */ +async function enterImmersion(mainWindow: window.Window) { + mainWindow.on("systemAvoidAreaChange", (area: window.AvoidArea) => { + AppStorage.SetOrCreate("topHeight", area.topRect.height); + AppStorage.SetOrCreate("bottomHeight", area.bottomRect.height); + }) + await mainWindow.setFullScreen(true) + await mainWindow.setSystemBarEnable(["status", "navigation"]) + await mainWindow.setSystemBarProperties({ + navigationBarColor: "#00000000", + statusBarColor: "#00000000", + navigationBarContentColor: "#FF0000", + statusBarContentColor: "#FF0000" + }) +} +export default class MainAbility extends Ability { + // do something + async onWindowStageCreate(windowStage: window.WindowStage) { + let mainWindow = await windowStage.getMainWindow() + await enterImmersion(mainWindow) + windowStage.loadContent('pages/index') + } + // do something +} +``` + +## 如何在eTS代码中执行Web组件内的JS函数? + +适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 + +通过WebController中runJavaScript方法异步执行JavaScript脚本,并通过回调方式返回脚本执行的结果。注意:runJavaScript需要在loadUrl完成后,比如onPageEnd中调用。 + +参考文档:[Web](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/arkui-ts/ts-basic-components-web.md) + +## 在容器组件嵌套的场景下,如何解决手势拖拽事件出现错乱的问题? + +适用于:OpenHarmony SDK 3.2.5.3版本,API9 Stage模型 + +gesture的属性distance默认值是5,把gesture的属性distance设成1就可以解决。 diff --git a/zh-cn/application-dev/faqs/faqs-ui-js.md b/zh-cn/application-dev/faqs/faqs-ui-js.md new file mode 100644 index 0000000000000000000000000000000000000000..390b9e3753099a245a1395f9fc8e82ff7f271675 --- /dev/null +++ b/zh-cn/application-dev/faqs/faqs-ui-js.md @@ -0,0 +1,96 @@ +# UI框架(JS)开发常见问题 + + + +## 如何取出xml文件中对应的字段 + +适用于:OpenHarmony SDK 3.2.3.5版本, API9 Stage模型 + +convertxml中convert方法提供了转换xml文本为JavaScript对象的能力。 + +示例: + + +``` +import convertxml from '@ohos.convertxml'; +// 代码片段 +xml = + '' + + '' + + ' Happy' + + ' Work' + + ' Play' + + ''; +let conv = new convertxml.ConvertXML(); +// 转换选项, 参考文档使用 +let options = {trim : false, declarationKey:"_declaration", + instructionKey : "_instruction", attributesKey : "_attributes", + textKey : "_text", cdataKey:"_cdata", doctypeKey : "_doctype", + commentKey : "_comment", parentKey : "_parent", typeKey : "_type", + nameKey : "_name", elementsKey : "_elements"} +let result:any = conv.convert(xml, options) // 将xml文本转为JS对象 +console.log('Test: ' + JSON.stringify(result)) +console.log('Test: ' + result._declaration._attributes.version) // xml代码片段version字段信息 +console.log('Test: ' + result._elements[0]._elements[0]._elements[0]._text) // xml代码片段title字段内容 +``` + +参考文档:[xml转换JavaScript](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-convertxml.md) + +## JS、TS和eTS的区别 + +适用于:OpenHarmony SDK 3.2.3.5版本,API9 Stage模型 + +- JS:Web 的编程语言。具有轻量级,弱类型等特点。 + +- TS:TS是JS的超集,拓展了JS的语法。有明确的类型与更多面向对象的内容如接口,枚举等。 + +- eTS:OpenHarmony UI开发框架语言,是对TS的扩展,通过声明式开发范式实现UI界面。 + +## 如何将时间转为时分秒格式 + +示例: + + +``` +export default class DateTimeUtil{ + /** + * 时分秒 + */ + getTime() { + const DATETIME = new Date() + return this.concatTime(DATETIME.getHours(),DATETIME.getMinutes(),DATETIME.getSeconds()) + } + /** + * 年月日 + */ + getDate() { + const DATETIME = new Date() + return this.concatDate(DATETIME.getFullYear(),DATETIME.getMonth()+1,DATETIME.getDate()) + } + /** + * 日期不足两位补充0 + * @param value-数据值 + */ + fill(value:number) { + return (value> 9 ? '' : '0') + value + } + /** + * 年月日格式修饰 + * @param year + * @param month + * @param date + */ + concatDate(year: number, month: number, date: number){ + return `${year}${this.fill(month)}${this.fill(date)}` + } + /** + * 时分秒格式修饰 + * @param hours + * @param minutes + * @param seconds + */ + concatTime(hours:number,minutes:number,seconds:number){ + return `${this.fill(hours)}${this.fill(minutes)}${this.fill(seconds)}` + } +} +``` diff --git a/zh-cn/application-dev/faqs/figures/zh-cn_image_0000001361254285.png b/zh-cn/application-dev/faqs/figures/zh-cn_image_0000001361254285.png new file mode 100644 index 0000000000000000000000000000000000000000..bbce36c81db4c07075a8f91075842b6f33f35b34 Binary files /dev/null and b/zh-cn/application-dev/faqs/figures/zh-cn_image_0000001361254285.png differ