HarmonyOS 关于onKeyEvent不生效问题

使用onKeyEvent监听物理返回键,在pages中监听事件发现onKeyEvent未执行,想要知道onKeyEvent使用场景和使用限制。

HarmonyOS
2024-10-11 12:19:00
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

1、onKeyEvent支持监听组件的事件并触发回调。对于页面级的返回操作可以通过onBackPress()方法来处理相应的逻辑处理与控制。返回true表示页面自己处理返回逻辑,不进行页面路由;返回false表示使用默认的路由返回逻辑,不设置返回值按照false处理。

2、自定义弹出无法控制在屏幕左滑和点击返回时保持不消失状态,建议这种场景下使用自定义组件代替弹窗。demo如下:

@Entry  
@Component  
struct CustomDialogPage {  
  controller: CustomDialogController = new CustomDialogController({ builder: CustomDialogExample({}) })  
  @Provide("isShowed") isShowed: boolean = false  
  @Provide("ifBanBack") ifBanBack: boolean = true  
  onBackPress() {  
    return this.ifBanBack  
  }  
  build() {  
    Column() { //自定义实现 Button('点击操作弹窗')  
      .onClick(() => {  
        this.isShowed = !this.isShowed  
      })  
        .visibility(this.isShowed ? Visibility.None : Visibility.Visible)  
      CustomExample().visibility(this.isShowed ? Visibility.Visible : Visibility.None)  
    }.width('100%').height('100%').justifyContent(FlexAlign.Center)  
  }  
}  
@Component  
struct CustomExample {  
  @Consume("isShowed") isShowed: boolean  
  @Consume("ifBanBack")  
  ifBanBack: boolean  
  
  build() {  
    Column() {  
      Text('This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content.  This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content.')   
      Blank()  
      Row() {  
        Button("拒绝").width(100)  
          .onClick(() => {  
            const context = getContext(this) as common.UIAbilityContext;  
            context.terminateSelf()//退出app }) Button('接受').width(100)   
              .onClick(() => {  
                this.isShowed = false  
                this.ifBanBack = false  
              })  
          }.width('100%').justifyContent(FlexAlign.SpaceAround).padding({ bottom: 10 })  
      }  
      .width('90%').height('70%').backgroundColor('#D5D5D5').borderRadius(10)  
    }  
  }

关于onBackPress的使用可参考官网文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-custom-component-lifecycle-0000001815927708#ZH-CN_TOPIC_0000001815927708__onbackpress

onBackPress是当用户点击返回按钮时触发,仅@Entry装饰的自定义组件生效(也就是返回页面时生效)对自定义弹窗不生效。之前的demo时使用自定义组件取代自定义弹窗,是不使用弹窗的。

分享
微博
QQ
微信
回复
2024-10-11 17:11:06
相关问题
Web组件的onKeyEvent键盘事件生效
2853浏览 • 1回复 待解决
HarmonyOS onKeyEvent 按钮触发
879浏览 • 1回复 待解决
HarmonyOS margin生效问题
1364浏览 • 1回复 待解决
HarmonyOS @Observed生效问题
1962浏览 • 1回复 待解决
HarmonyOS targetSpace生效问题
1140浏览 • 1回复 待解决
HarmonyOS margin生效
1839浏览 • 1回复 待解决
HarmonyOS expandSafeArea生效
2271浏览 • 1回复 待解决
创建的单例换了页面后生效问题
3226浏览 • 3回复 待解决
HarmonyOS Web组件borderRadius生效
1431浏览 • 1回复 待解决
HarmonyOS Span内边距生效
1022浏览 • 1回复 待解决
HarmonyOS Stack 里 align生效
1436浏览 • 1回复 待解决
HarmonyOS photoViewPicker智能推荐生效
1566浏览 • 1回复 待解决
abiFilters配置生效
1829浏览 • 1回复 待解决
ConstraintSize尺寸设置生效
3698浏览 • 1回复 待解决
HarmonyOS hitTestBehavior.block生效
1383浏览 • 1回复 待解决
HarmonyOS Panel 设置 borderRadius 生效
2182浏览 • 1回复 待解决
HarmonyOS stack设置圆角生效
1359浏览 • 1回复 待解决
HarmonyOS 单例模式生效
1493浏览 • 1回复 待解决
HarmonyOS 为什么calc生效
1309浏览 • 1回复 待解决