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

1、控件enabled设置为false时,hover失效

enable为通用属性,设置为false会使鼠标事件失效,从而导致onHover方法失效。

2、组件被隐藏后 onVisibleAreaChange 事件触发了两次

在绑定ratios为[0, 1]的情况下,对于突然消失的组件会触发两次onVisibleAreaChange方法。

规格就是如此,如果想只触发一次,就只能设置一个ratios。

3、@Watch是否有粘性的概念

不支持。在第一次初始化变量的时候,@Watch绑定的回调函数不会被调用,即认为初始化不是状态变量的改变。只有在后续变量改变时,才会调用@Watch回调方法。

4、使用@Watch监听并在回调函数中调用其他异步接口时UI响应慢

@Watch设计的用途是为了快速的计算,其在UI重新渲染之前执行,不建议在@Watch函数中调用async await,异步行为会延迟组件的重新渲染,可能会导致性能问题。

5、如何将某个组件的点击事件传递给其他组件

可以通过全局函数sendEventByKey将点击事件发送给其他组件。

6、如何移除页面上Video组件

先通过exitFullscreen()取消全屏展示,再移除Video组件。

7、触摸事件的TouchEvent调用stopPropagation时无法阻止事件分发

Button嵌套Button时,外部调用stopPropagation没有阻止内部Button触发onTouch事件。

stopPropagation是阻止事件冒泡,事件冒泡是从里到外触发的,所以给外层按钮设置无效,如果想给外层按钮设置属性从而阻止里层按钮触发触摸事件,可以给外层按钮添加.hitTestBehavior(HitTestMode.Block)。

8、Input组件是否支持设置文本居中对齐

input组件属于类web范式组件,不支持设置文本对齐方式,text-align样式只针对text组件生效。

9、如何获取窗口的宽高信息

获取指定窗口对象Window后,在该对象上使用getWindowProperties()获取窗口各个属性,在属性windowRect中获取窗口宽高信息。

10、如何判断JS对象中是否存在某个值

Object.values(对象名).indexOf(想要判断的值),若返回-1表示不包含对应值,返回值不等于-1则表示包含。

11、应用如何设置隐藏顶部的状态栏

在UIAbility的onWindowStageCreate的生命周期中设置setWindowSystemBarEnable接口即可。

12、如何锁定设备竖屏,使得窗口不随屏幕旋转

采用窗口的setPreferredOrientation方法可以实现该效果,将orientation参数设置为window.Orientation.PORTRAIT时,可锁定屏幕为竖屏。

13、调用window实例的setWindowSystemBarProperties接口设置窗口状态栏和导航栏的高亮属性时不生效

调用window实例的setWindowSystemBarProperties接口时,设置isStatusBarLightIcon和isNavigationBarLightIcon属性不生效。

状态栏字体高亮属性的本质就只是让字体变成白色。调用window实例的setWindowSystemBarProperties接口时,如果设置了状态栏内容颜色statusBarContentColor,就以开发者设置的颜色为准,isStatusBarLightIcon状态栏字体高亮属性就不生效;同理,如果设置了导航栏内容颜色navigationBarContentColor,isNavigationBarLightIcon导航栏字体高亮属性就不生效。

14、如何保持屏幕常亮

获取窗口实例对象后,调用setWindowKeepScreenOn方法可设置屏幕是否常亮。

15、如何监听窗口大小的变化

获取窗口实例对象后,可以通过窗口的on('windowSizeChange')方法实现对窗口尺寸大小变化的监听。

16、如何获取屏幕的宽度、高度、分辨率和横竖屏等信息

引入屏幕属性模块,可以通过调用display.getDefaultDisplaySync()方法获取display对象后,从而获取到屏幕的宽度、高度、分辨率和横竖屏等信息。

17、如何设置沉浸式窗口

在EntryAbility的onWindowStageCreate方法中通过windowStage获取window,然后分别调用setWindowLayoutFullScreen和setWindowSystemBarEnable方法。

18、如何获取窗口的宽度

可以通过getWindowProperties这个接口获取窗口属性,窗口属性的windowRect是窗口的尺寸。

19、如何解决window创建的窗口默认焦点不在界面上,导致不响应返回事件的问题

开发者使用了错误的系统窗口类型,导致创建的窗口不获焦。窗口类型有多种,详情可以参考以下链接。

20、如何获取状态栏和导航栏高度

获取系统状态栏,导航栏等避让区域,使用系统提供的getWindowAvoidArea获取系统规避区域,返回值中的topRect.height即为系统状态栏高度。

21、如何实现Tabs组件的TabBar从左到右依次排列

系统提供的Tabs暂不支持居左显示,可以通过Scroll和Row组件用来实现一个页签,在onclick事件中通过修改索引值和Tabs组件的索引联动,实现切换效果,同时将Tabs的barHeight置为0。

22、如何进行页面横竖屏切换

设置方法:setPreferredOrientation(orientation: Orientation, callback: AsyncCallback<void>): void,Orientation取值为AUTO_ROTATION,表示传感器自动旋转模式。

23、为什么componentUtils.getRectangleById在动画结束后才能获取组件最新位置

componentUtils.getRectangleById会根据组件ID获取组件实例对象, 通过组件实例对象将获取的坐标位置和大小同步返回,因此动画过程中没有回调通知到应用,需要动画结束后返回组件大小、位置、平移缩放旋转及仿射矩阵属性信息,如果每帧都频繁通知会影响性能和功耗。

24、是否有处理"9图"(又称"draw9patch"、".9图"、"点9图"等)的平替方案

Image组件已经提供了与点九图相同功能的API设置,可以通过设置resizable属性来设置ResizableOptions,也就是图像拉伸时可调整大小的图像选项。ResizableOptions的参数slice中有top、left、bottom和right四个属性,分别代表图片上下左右四个方向拉伸时保持不变距离。

25、ArkUI有没有在组件刷新后的回调事件

当组件状态变量改变时会刷新组件,可以分以下两种情况:

1.如果是组件的属性刷新,可将属性用状态变量储存,可以用watch监听状态变量的变化。

2.如果是组件大小变化,可以通过onSizeChange(),监听到组件区域的变化。

更多详情查看:文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值