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

1、如何在自定义弹窗中再次弹窗
  • 通过@CustomDialog创建两个自定义弹窗。

  • 在页面上的Button按钮上设置点击事件,通过调用dialogController.open()方法打开弹窗1。

  • 在弹窗1的Button按钮上设置点击事件,通过dialogControllerTwo.open()方法打开第二个弹窗。

2、Grid如何实现拖拽功能
  • 设置属性editMode(true)设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem。

  • 在onItemDragStart回调中设置拖拽过程中显示的图片。

  • 在onItemDrop中获取拖拽起始位置,和拖拽插入位置,并在onItemDrop中完成交换数组位置逻辑。

3、@State装饰嵌套结构的变量时,为什么嵌套结构中数组元素增加或减少时界面不会刷新

如下代码点击增加元素或减少元素,增加或减少嵌套在对象中的数组元素,界面不会有变化。

4、如何监听数组内对象属性变化

通过@Observed配合@ObjectLink装饰符实现。@Observed用于类,@ObjectLink用于变量。

5、如何设置沉浸式状态栏
  1. 获取应用主窗口。通过getMainWindow接口获取应用主窗口。

  2. 实现沉浸式效果。有以下两种方式:

    • 方式一:调用setWindowSystemBarEnable接口,设置导航栏、状态栏不显示,从而达到沉浸式效果。

    • 方式二:调用setWindowLayoutFullScreen接口,设置应用主窗口为全屏布局;然后调用setWindowSystemBarProperties接口,设置导航栏、状态栏的透明度、背景/文字颜色以及高亮图标等属性,使之保持与主窗口显示协调一致,从而达到沉浸式效果。

  3. 加载显示沉浸式窗口的具体内容。通过loadContent接口加载沉浸式窗口的具体内容。

6、如何动态控制键盘绑定在不同的TextInput上

软键盘的收起和弹出和输入框的获焦和失焦有关,可以通过focusControl动态的控制输入框焦点的转移,从而控制软键盘的收起和弹出。同时通过将焦点转移到目标输入框完成键盘的动态切换。

7、如何使用iconfont

使用iconfont开发者需要先拿到字体库对应的ttf文件,然后通过font.registerFont接口去注册,在Text上使用对应的unicode编码格式就可以使用了。

8、Image组件是否有缓存机制
  1. Image的缓存策略

Image模块提供了三级Cache机制,解码后内存图片缓存、解码前数据缓存、物理磁盘缓存。在加载图片时会逐级查找,如果在Cache中找到之前加载过的图片则提前返回对应的结果。

  1. Image组件如何配置打开和关闭缓存

  • 内存图片缓存:通过setImageCacheCount接口打开缓存,如果希望每次联网都获取最新资源,可以不设置或设置为0不缓存。

  • 磁盘缓存:磁盘缓存是默认开启的,默认值为100M,可以将setImageFileCacheSize的值设置为0关闭磁盘缓存。

  • 解码前数据缓存:通过setImageRawDataCacheSize设置内存中缓存解码前图片数据的大小上限,单位为字节,提升再次加载同源图片的加载速度。如果不设置则默认为0,不进行缓存。

9、如何使当前页面弹窗在页面跳转返回之后还存在(隐私详情页场景)

当前自定义弹窗的规格是在页面跳转之后,弹窗会消失。想要实现当前页面弹窗在页面跳转返回之后还存在,可以使用Stack组件模拟出Dialog弹窗,实现页面跳转之后返回Dialog依然显示的效果。

10、ForEach键值生成规则是怎样的

键值的生成规则和itemGenerator 、keyGenerator有关:

1.如果是keyGenerator这个函数缺省,此时生成规则由框架确定,生成规则为item和index拼接,(item: any, index: number)=>{ return index +“_”+ JSON.stringify(item); }。

2.如果keyGenerator没有缺省且未包含index,当itemGenerator中包含index,生成的规则是自定义键值与index拼接成的字符串,如(item)=>item+2 对应的键值是 index+'_'+(item+2),如果itemGenerator中未包含index,此时keyGenerator的生成规则是由开发者自定义的键值生成规则。

3.如果keyGenerator没有缺省,且包含index,此时不管itemGenerator中是否包含index,生成的键值规则都是开发者自定义的键值生成规格,框架不会对去拼接index。

11、Flex布局与w3c中的flex是否有差异
  • 在w3c标准中,flex组件主轴的默认大小是由子组件决定的,但是flex的align-items的默认值是stretch,也就是拉伸,因此在父flex组件不设置align-items时,子flex组件会在主轴上填满父组件,而当将父组件的align-items设置为其他值时,子flex组件由他自己的子组件决定主轴的大小了。

  • 在ArkTS上,Flex组件主轴的默认大小是由父组件决定的,即在主轴方向上填满父组件,因此在不设置flex组件主轴大小的情况下,对齐方式alignItems是不会影响Flex组件的主轴大小的,且ArkTS中Flex组件的alignItems属性的默认值为ItemAlign.Start,因此设置了ItemAlign.Start后,Flex组件仍然会在主轴上填满父组件。

12、ArkUI组件能否支持继承
  • 1.ArkUI是声明式的语法,对于组件来说是一个struct,组件是无法支持继承,后续也无支持继承相关需求规划。

  • 2.基于开发者的场景,如果开发者对应继承的诉求,是想抽出公共的父类,方便做组件复用则可以考虑通过动态属性设置attributeModifier来实现组件复用扩展,attributeModifier已经实现一部分能力,还有部分能力,以需求跟踪。

  • 3.如果开发者的诉求是想在基类页面的生命周期统一做一些业务处理,这可以通过observer的无感监听能力,监听页面的生命周期,实现统一生命周期的诉求。

13、@Style 和 @Extend 是否支持export导出
  • @Styles或@Extend目前不支持export导出,后续这两个装饰器不会继续演进。

  • 推荐开发者使用新的样式复用方法,通过attributeModifier属性动态的设置组件,通过自定义class继承对应基础组件的Modifier,在class中设置复用的属性,对应class也没有无法export的限制。但是attributeModifier的复用能力仍有缺陷,目前不支持事件手势,这两个能力已有需求跟踪。

14、如何自定义弹窗的弹出动画和关闭动画

可以通过给弹窗设置组件转场动画transition来实现

15、如何实现弹窗和软键盘的避让

组件设置expandSafeArea属性可以控制组件扩展其安全区域,实现键盘避让,键盘拉起时布局不发生改变。

16、Canvas绘制内容如何动态更新

Canvas在声明式语法中是数据驱动UI进行刷新,可以将变化的数据通过@Watch监听,同时绑定一个自己封装的draw()方法,当数据刷新时就会调用Watch绑定的方法执行绘制逻辑。

17、组件是否支持泛型

自定义组件是一个struct不等同于class或者interface,无法使用泛型。

18、如何在父组件中调用子组件封装的方法

可以定义一个controller类,在controller类中定义和子组件中类型相同的方法,在子组件中将实际封装的方法给到controller。父组件在使用时,new一个controller对象然后转入子类中,在父组件中调用controller对应的方法即可。

19、自定义组件是否能通过容器保存

自定义组件是struct而不是class,无法储存在容器中。可以将自定义组件封装在Builder函数,通过Builder的封装来完成存储。

更多详情查看:文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值