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键盘事件生效
1979浏览 • 1回复 待解决
HarmonyOS @Observed生效问题
289浏览 • 1回复 待解决
HarmonyOS margin生效
547浏览 • 1回复 待解决
HarmonyOS expandSafeArea生效
220浏览 • 1回复 待解决
HarmonyOS photoViewPicker智能推荐生效
200浏览 • 1回复 待解决
创建的单例换了页面后生效问题
2144浏览 • 3回复 待解决
HarmonyOS Badge文本颜色设置生效
194浏览 • 1回复 待解决
HarmonyOS 编译器配置生效
388浏览 • 1回复 待解决
HarmonyOS 组件切换深色模式生效
341浏览 • 1回复 待解决
HarmonyOS 弹窗封装后open生效
285浏览 • 1回复 待解决
ConstraintSize尺寸设置生效
2337浏览 • 1回复 待解决
HarmonyOS Panel 设置 borderRadius 生效
595浏览 • 1回复 待解决
HarmonyOS hitTestBehavior.block生效
331浏览 • 1回复 待解决
abiFilters配置生效
343浏览 • 1回复 待解决
HarmonyOS right的padding和margin生效
604浏览 • 1回复 待解决
使用position之后height生效
2365浏览 • 1回复 待解决
容器组件onVisibleAreaChange生效
1803浏览 • 1回复 待解决
HarmonyOS 设置了icon和label生效
122浏览 • 1回复 待解决
HarmonyOS部分场景下expandSafeArea生效
922浏览 • 1回复 待解决
HarmonyOS 修改状态栏颜色生效
238浏览 • 1回复 待解决