【HarmonyOS NEXT】FAQ之应用框架(ArkUI-11)

1、Component如何监听应用前后台切换

前后台生命周期,是应用的生命周期,页面和组件并不感知,组件只有aboutToAppear和aboutToDisappear。如果组件需要感知应用切换前后台的生命周期变化,可以给组件设置一个应用前后台的变量,在应用前后台切换的时候,在UIAbility中对应的生命周期函数上更改此变量,在组件中获取AppStorage状态变量的改变并执行对应的逻辑。

2、自定义组件如何实现类似系统组件的链式调用

目前ArkTs语法不支持这种链式调用,组件本身不是一个class对象,无法像普通对象一样调用方法,只能在组件声明的时候在参数里面,传递回调方法去修改组件的参数,无法直接通过链式调用方法。

3、自定义组件在外部设置属性方法和在build方法内部设置有什么区别

自定义组件在创建之后,会默认给整个组件外面包裹一层不可见的容器。在声明自定义组件的时候,这些属性和样式是作用在这个不可见容器上。而不是自己作用在内部的根组件上,所以两者效果不同。

4、如何实现页面加载的loading效果

使用Stack堆叠组件和LoadingProgress加载组件来实现首次进入页面,页面加载的效果。

5、使用Navigation跳转页面时如何传递带方法的对象

实现步骤如下:

  • 在oh-package.json5中添加第三方插件class-transformer的依赖;

  • 在使用第三方插件class-transformer的页面导入class-transformer库;

  • 定义要传递的类;

  • 在获取到其他页面传过来的参数后通过class-transformer的plainToClass方法转换成类对象;

  • 调用类对象的方法。

6、如何实现下拉刷新和上滑加载的效果

使用onTouch事件,在putDownPullUpRefresh方法里判断触摸事件是否满足下拉刷新和上滑加载的条件,同时使用条件渲染判断是否显示刷新和加载的布局。

7、如何正确获取刘海区域的高度,topRect中的取值是height、top还是height+top

通过Window.getWindowAvoidArea(window.AvoidAreaType.TYPE_CUTOUT).topRect来获取刘海的高度,在topRect中的取值中,top指刘海屏原点(矩形左上角)距离屏幕顶端的像素值,left为距屏幕左侧的像素值,width和height分别为刘海屏所在外包矩形的宽高。可根据语义进行计算,并以实际效果为准。

8、应用开启禁止截屏之后,用户进行截屏以及录屏后的行为是什么

设置窗口为隐私模式后,截屏录屏或分享屏幕,屏幕会显示灰色蒙层(隐私窗口不允许这些操作)。

9、在屏幕底部的组件的响应区域是否存在遮挡

创建了一个window,加载自定义键盘后,发现底部按钮的下半部分不能响应点击事件。不存在,底部遮挡区域在20px左右,可以通过on('avoidAreaChange')获取,开发者也可以定义一个点击区域来测试点击事件能否触发。

10、创建subwindow默认是否铺满全屏,铺满全屏时如何隐藏状态栏

子窗口默认不会铺满全屏。使用setWindowSystemBarEnable设置窗口全屏模式时状态栏的可见模式,设置系统栏的API需要由主窗口调用。

11、如何让Grid组件在高度不确定的情况下,实现自适应高度

问题现象

页面中使用Grid组件,因为GridItem数量不固定,且不允许滚动,理想中Grid组件高度会被GridItem内容自动撑起,实际体验中发现:

  1. Grid必须显式设置固定height属性,这种由于GridItem数量不固定,且不允许出现滚动,不满足需求

  2. 设置MaxCount属性后,可以实现高度被撑起,但与文档的解释好像不符,且GridItem数量不固定,所以也不满足需求

  3. Grid的height设置为auto时也不会被自动撑起。

可能原因

grid不会自适应子节点的高度,不设置高度就是和父组件一样高。

解决措施

目前有两个替代方案:

1.使用list替代,设置其lanes属性进行分列。

2.可以动态计算GridItem高度,然后给Grid的heigth设置高度。

12、如何解决点击子组件模块区域会触发父组件的点击事件问题

enabled的值为false时,点击Button按钮,会导致父组件的点击事件触发。对Button组件包裹一层容器组件,并设置hitTestBehavior属性, 属性值设置为HitTestMode.Block,可阻止事件的冒泡。

13、当子组件触发触摸事件的时候,父组件如果设置触摸事件的话,如何解决父组件也会被触发的问题

触摸事件中,当子组件触发触摸事件的时候,父组件如果设置触摸事件的话,也会触发。在onTouch函数中执行event.stopPropagation()可阻止冒泡。

14、使用0x八位颜色设置渐变透明度为什么与#八位资源颜色值不同

因为HarmonyOS支持0x+八位或六位的写法,因此在透明度设为00时,前两位透明度不再借位,即0x00333333=0x333333,相当于没有设置透明度,因此没有透明效果。建议使用rgba方式明确颜色。

15、如何实现背景跟随文字大小改变

可以不设置宽度大小,通过文字长度来撑开宽度。

16、如何设置Text的字体,可以不受系统设置里显示字体大小的影响

目前px2fp, px2vp等方法在修改系统显示大小之后不会实时更新,字体默认单位是fp,界面像素单位是px,可以使用像素单位来设置字体大小。

更多详情查看:文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值