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

1、RichEditor和Component作为一个整体,如何实现自适应光标位置进行滚动

使用Scroll组件把RichEditor和Component包裹,通过onAreaChange的回调,调用scroller.scrollBy的能力,以此来改变滚动组件的高度。

2、如何实现图片预览

点击图片,实现图片预览,点击图片周边蒙层后,退出预览,预览图中可对图片进行放大缩小等基础操作。

3、一个自定义组件内某一时机批量刷新多个@State修饰的状态变量,是否会影响性能

比如一个自定义的Component,有20个@State修饰的变量,每个State都定义了相关更新接口,外部某个时机,会批量更新这些State,调用每个State的更新接口,会不会导致频繁更新Component组件,导致性能问题?

同时对多个State接口更新不会导致性能问题,因为每个@State都要有去更新UI的能力,一次性批量的修改不会导致一个组件被反复刷多次,在一个Vsync内,对同一个组件的多次标脏只刷新一次。如果状态变量数量过多会影响自定义组件创建耗时。

4、List控件加载的数据如何判断是否超过一屏
  • 通过行高计算

  • 通过getItemRect(index: number): RectResult获取子组件的大小位置,可以获取最后一个ListItem的位置大小信息进行计算

  • 通过getItemRectInGroup(index: number, indexInGroup: number): RectResult,获取最后一个ListItemGroup中的最后一个ListItem的大小和相对于List的位置进行计算

5、常用可以设置'auto'的属性的组件及其含义的介绍

在Row、Column、RelativeContainer组件中,width、height属性设置为'auto'表示自适应子组件。在TextInput组件中,width设置为'auto'表示自适应文本宽度。

flexBasis属性默认值为'auto',表示组件在主轴方向上的基准尺寸为组件原本的大小。

6、如何实现瀑布流的分组

可以通过WaterFlow的接口参数WaterFlowSections设置瀑布流分组,通过splice移除或者替换已存在的分组和/或添加新分组、push将指定分组添加到瀑布流末尾、update修改指定索引分组的配置信息。

7、双层嵌套list,如何使用LazyForEach起作用

在一个外层ListA,分多个ListItem,每个ListItem中都是一个List,在内层List中使用LazyForEach,达到懒加载效果。如果设置外层ListA的每个ListItem 的高度情况下,内层List的LazyForEach会失效,会一次性都会加载出来。如果 不设置外层ListA的每个ListItem 的高度情况下,内层List的 LazyForEach会起作用,但是有部分内层List的数据显示不完全。

固定内层List高度。

8、Marquee组件的文字滚动,第一次滚动出现大量空白,如何避免空白出现

Marquee暂不支持在文本末尾停止,推荐使用Scroll代替跑马灯组件实现文字滚动。

9、如何解决Web页上下滑动时会误触发tab页翻页手势及tab页切换时Web组件还可以上下滚动问题

可能场景:

  • Web页上下滑动的时候会误触发tab页翻页手势。

  • tab页切换时Web组件还可以上下滚动。

  1. 可以通过给web组件设置嵌套滚动nestedScroll属性解决。

  2. 可以通过给web组件设置网页是否允许滚动setScrollable属性解决。

10、如何判断当前设备是手机还是折叠屏手机
  1. 可以通过设备信息@ohos.deviceInfo接口的deviceType属性获取设备类型。

  2. 可以通过屏幕属性@ohos.display的isFoldable方法返回当前设备是否可折叠的结果。

11、如何在使用子窗口时保持键盘获焦

可以使用窗口@ohos.window的keepKeyboardOnFocus接口,在窗口获焦时保留由其他窗口创建的软键盘,仅支持系统窗口与应用子窗口。

12、如何让通过terminateSelf停止Ability后的应用不出现在最近任务列表中

可在moudule.json5中的abilities标签下配置removeMissionAfterTerminate属性为true。

13、如何实现直播评论场景中顶部渐变遮罩效果
  1. 通过overlay在当前组件上,添加遮罩的浮层效果。

  2. 再通过linearGradient设置颜色渐变。

  3. 使用blendMode让当前浮层与List混合实现渐变遮罩效果。

14、如何在Tabs的tabBar中添加其他组件

Tabs组件无法在tabBar中添加其它组件,可以通过自定义Tabs,实现在Tabs的tabBar中添加其他组件。

15、不同位置文本框拉起键盘时,避让策略不一样,如何实现?

默认情况下输入法不遮挡输入框情况下,不进行避让,仅在遮挡输入框的情况下避让方式生效

16、使用Canvas如何实现部分区域镂空的效果
  1. 利用Canvas绘制镂空圆形;

  2. 使用Stack组件叠加在需要透明展示的区域上。

更多详情查看:文档中心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值