【每日学点鸿蒙知识】桌面快捷方式API、Swiper显示异常、Page防止截屏、Tabs组件监听显示隐藏、PDF翻页回调
1、HarmonyOS 桌面快捷方式处理的api说明?
HarmonyOS不考虑开放桌面快捷打开方式能力,建议使用服务卡片定制对应场景
长按应用图标显示的快捷方式可通过module.json5文件的shortcuts标签进行配置,该快捷方式只允许跳转至某个具体的UIAbility,无法直接跳转至非入口页面,且最多可以配置四个快捷方式
对于应用的快捷方式,当前开发者可以通过服务卡片实现类似的能力。点击服务卡片能够跳转至指定UIAbility,且开发者可根据传递的参数,拉起不同的页面。但当前服务卡片不可在应用内创建,只能由用户按照长按应用->预览->添加的步骤,将卡片添加至桌面。
参考文档:
- https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/module-configuration-file-V5
- https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/formkit-overview-V5
2、HarmonyOS swiper使用customContentTransition后显示异常(卡片盖在了前一个卡片上,而不是切换)?
@Entry
@Component
struct Index {
@State cardChangeAnimationDuration: number = 0
swiperController: SwiperController = new SwiperController()
@State autoPlay: boolean = true
userScrolled: boolean = false
dataList: Color[] = [Color.Red, Color.Yellow, Color.Blue]
aboutToAppear(): void {
setInterval(() => {
if (this.autoPlay) {
this.swiperController.showNext()
promptAction.showToast({ message: '切换下一个卡片' })
}
}, 2000);
}
build() {
Stack() {
Swiper(this.swiperController) {
ForEach(this.dataList, (item: Color, index) => {
Text(`卡片${index}`)
.textAlign(TextAlign.Center)
.font({ size: 17, weight: 500 })
.backgroundColor(item)
.opacity(0.5)
})
}
.autoPlay(false) // 组件不自动轮播,自动轮播逻辑交由VM调用scrollToIndex/showNext实现
.loop(this.autoPlay)
.indicator(false)
.duration(this.cardChangeAnimationDuration) // 切换时长可配置
.curve(Curve.Linear) // 注:<=API12, duration生效需要配置.curve(Curve.Linear)
.cachedCount(3)
.width('100%')
.height('100%')
.nestedScroll(SwiperNestedScrollMode.SELF_FIRST)
.onClick(() => {
this.cardChangeAnimationDuration = !this.autoPlay ? 700 : 400
this.autoPlay = !this.autoPlay
if (this.autoPlay) {
this.userScrolled = false
}
})
.onGestureSwipe((index: number, extraInfo: SwiperAnimationEvent) => {
this.userScrolled = true
})
.onAnimationEnd((index: number, extraInfo: SwiperAnimationEvent) => {
if (extraInfo.currentOffset == 0 && this.userScrolled) {
this.autoPlay = false
}
})
.customContentTransition({
timeout: 1000,
transition: (proxy: SwiperContentTransitionProxy) => {
}
})
}
}
}
自定义动画需要自己在实现customContentTransition这个时,自己处理相关得逻辑,请参考示例4:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-swiper-V5#swipercontentanimatedtransition12%E5%AF%B9%E8%B1%A1%E8%AF%B4%E6%98%8E
3、HarmonyOS 在hsp中的某个page,如何实现防止截屏呢?
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5
实现步骤:一些页面需要实现防截屏功能。首先需要在module.json5中申请隐私窗口权限。然后在onPageShow()中获取当前窗口对象并设置隐私模式。在退出页面的时候,在onPageHide()生命周期中取消隐私模式即可。
4、HarmonyOS Tabs中组件切换怎么监听组件的显示与隐藏?
想要组件显示时做一些操作处理,发现aboutToAppear方法不会被触发到
使用visibility进行显隐控制
@Entry
@Component
struct VisibilityExample {
build() {
Column() {
Column() {
// 隐藏不参与占位
Text('None').fontSize(9).width('90%').fontColor(0xCCCCCC)
Row().visibility(Visibility.None).width('90%').height(80).backgroundColor(0xAFEEEE)
// 隐藏参与占位
Text('Hidden').fontSize(9).width('90%').fontColor(0xCCCCCC)
Row().visibility(Visibility.Hidden).width('90%').height(80).backgroundColor(0xAFEEEE)
// 正常显示,组件默认的显示模式
Text('Visible').fontSize(9).width('90%').fontColor(0xCCCCCC)
Row().visibility(Visibility.Visible).width('90%').height(80).backgroundColor(0xAFEEEE)
}.width('90%').border({ width: 1 })
}.width('100%').margin({ top: 5 })
}
}
5、HarmonyOS PDF Kit 能否支持PDF文件翻页回调?
PDF Kit目前暂不支持PDF文件翻页回调。PDF Kit主要提供了打开PDF文件、页面添加批注、页眉页脚、水印、背景及书签等功能。