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

1、TextInput的visibility属性设置为Hide或者None之后是否可获焦

设置visibility后,组件会直接从页面中消失,所以无法获焦。可以通过给textInput设置opacity(0.01)以此来隐藏,但是又不影响焦点的获取。

2、如何在Navigation页面中实现侧滑事件拦截
  • 因为功能是以har的形式集成在主工程中,没有@Entry修饰的组件,也无法作为入口组件,不能使用@Entry组件的onBackPress生命周期函数。

  • 在使用方面onBackPressed是NavDestination自己的事件,需配合NavDestination组件使用; 且组件本身用于显示Navigation内容区,作为子页面的根容器,因此若拦截子页面的返回事件,可使用onBackPressed回调。

  • onBackPress生命周期函数只能在@Entry组件中使用,因此若对入口组件的返回事件拦截可使用onBackPress生命周期函数。

  • 通过NavDestination组件的onBackPressed回调对返回事件进行拦截。

3、如何实现页面统一置灰功能

可以通过grayscale()方法添加灰度效果,实现统一置灰功能。

grayscale()接收一个number类型的参数,定义灰度转换的比例。

  • 参数为1.0:表示完全转为灰度图像。

  • 参数为0.0:表示图像无变化。

  • 参数在0.0和1.0之间时:表示效果呈线性变化。

4、如何实现List内拖拽交换子组件位置
  1. 在onItemDragStart回调中设置拖拽过程中显示的内容。

  2. 在onItemDrop中获取拖拽起始位置,和拖拽插入位置,并在onItemDrop中调用changeListItemIndex函数完成交换数组位置。

5、如何将ListItem的swipeAction滑动效果恢复至未滑动

可以使用ListScroller提供的closeAllSwipeActions()方法将滑动效果进行恢复。

6、如何实现List/Swiper/Grid嵌套滚动的下拉刷新和上拉加载更多

下拉刷新可以使用Refresh嵌套List来实现,刷新逻辑在onRefreshing回调方法里面执行;上拉加载更多的实现可以给List添加onReachEnd事件回调,当列表滑动到底部的时候触发。

7、如何在代码中触发应用后台运行

minimize方法提供该能力。若主窗口调用,可以将窗口最小化,并支持在Dock栏中还原。若子窗口调用,可以将窗口隐藏。

8、如何将Tab的边缘滑动效果关掉,不要回弹

可以给边缘tabContent添加PanGesture手势来实现,给最左侧的tabContent添加向右滑动的手势,给最右侧的tabContent添加向左滑动手势。

9、自定义键盘和系统键盘如何切换

可以通过@State声明一个状态变量,动态控制customKeyboard属性的值来实现自定义键盘和系统键盘如何切换。

10、CustomDialog自定义弹窗组件如何进行物理返回拦截
  • 当用户执行点击遮障层关闭、左滑/右滑、三键back、键盘ESC关闭交互操作时,如果注册该回调函数,则不会立刻关闭弹窗。

  • 在回调函数中可以通过reason得到阻拦关闭弹窗的操作类型,从而根据原因选择是否能关闭弹窗。

11、ArkUI自定义父子组件之间如何进行事件传递

针对@Component修饰的父子组件,可以通过对象将父组件的属性和事件方法传递给子组件,在子组件中接收父组件的属性,并且在子组件定义父组件的事件。

12、struct和class的区别是什么

struct只在自定义组件中使用@Component 装饰的struct 就是自定义组件,自定义组件和class是两个概念,自定义组件没有类型,也不能等同于class。

13、跳转页面如何实现页面级别的透明效果

推荐使用的是Navigation跳转方式,可以将NavDestination设置mode为NavDestinationMode.DIALOG弹窗类型,此时整个NavDestination页面默认透明显示,具体可以参考:页面显示类型中的弹窗类型。

14、自定义组件复用的触发条件和影响性能提升的注意点

组件复用触发条件:

  1. 自定义组件被@Reusable装饰器修饰,即为有组件复用的能力。如果一个组件里可复用的组件不止一个,记得加上reuseId标注;

  2. 基于从缓存区复用组件这个行为,复用组件必须要有“从组件树移除”并且“再次加入组件树”这两个场景,才能触发组件复用。缺一不可;

  3. 组件的缓存和复用只针对同一个父组件。

组件复用性能提升注意点:

  1. 精准控制组件刷新范围使用

  2. 复用组件嵌套结构会变更的场景,使用reuseId标记不用结构的组件构成

  3. 避免使用函数/方法作为复用组件创建时的入参

  4. 减少组件复用的嵌套层级

15、WaterFlow中reuse出错,不同reuseId的FlowItem被相互复用,是什么原因导致的?

该原因可能是由于reuseId加在FlowItem上导致的,reuseId需要加在标记为复用的自定义组件上。

16、有什么方法可以正确地在 XComponent 视频组件上设置圆角边框吗?

可以尝试同时给XComponent和父组件设置borderRadius圆角属性。

17、如何在保存图片时,给图片添加水印?

使用OffScreenCanvas离屏画布拿到图片源数据,在离屏画布上使用OffscreenCanvasRenderingContext2D的drawImage和fillText分别绘制图像和文水印文字。水印图片的保存可以使用安全控件SaveButton结合fs.write来实现。

18、如何实现二维数组的懒加载?

重新定义数据源数据类型,通过配合HashMap实现二维数组的懒加载数据源,然后通过ListGroup对数据进行分组。

更多详情查看:文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值