【HarmonyOS Next】鴻蒙監聽手機按鍵
一、前言
應用開發中我們會遇到監聽用戶實體按鍵,或者擴展按鍵的需求。亦或者是在某些場景下,禁止用戶按下某些按鍵的業務需求。
這兩種需求,鴻蒙都提供了對應的監聽事件進行處理。
onKeyEvent 默認的按鈕監聽事件
onKeyPreIme 這是優先級最高的監聽回調,別上面多了一個return開關,用于告訴系統監聽事件是否再向下傳遞。
窗口是第一級接收按鈕事件的實體。后續會傳遞給后三級。
二、解決方案參考
我們以音量實體按鍵舉例,
通過綁定onKeyEvent按鍵監聽來獲取按鍵事件的回調。需要注意的是,綁定了按鍵事件需要控件獲得焦點時,用戶去操作按鍵才會有監聽回調。
// 給控件添加默認聚焦.defaultFocus(true)// 給Button設置onKeyEvent事件.onKeyEvent((event?: KeyEvent) => {})
使用onKeyPreIme屏蔽音量使用下鍵。
import { KeyCode } from '@kit.InputKit';
struct PreImeEventExample {build() {Column() {Search({placeholder: "Search..."}).width("80%").height("40vp").border({ radius:"20vp" }).onKeyPreIme((event:KeyEvent) => {// 屏蔽音量使用下鍵if (event.keyCode == KeyCode.KEYCODE_VOLUME_DOWN) {return true;}return false;})}}
}
三、DEMO源碼示例:
import { KeyCode } from '@kit.InputKit'
struct KeyClickTestPage { text: string = '' eventType: string = ''build() {Column() {Button('KeyEvent').defaultFocus(true)// 給Button設置onKeyEvent事件.onKeyEvent((event?: KeyEvent) => {if(event){if (event.type === KeyType.Down) {this.eventType = 'Down' // 按鈕 按下}if (event.type === KeyType.Up) {this.eventType = 'Up'// 按鈕 抬起}// KEYCODE_VOLUME_UP 16 音量增加鍵// KEYCODE_VOLUME_DOWN 17 音量減小鍵// KEYCODE_POWER 18 電源鍵this.text = 'onKeyEvent KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText + '\nintentionCode:' + event.intentionCode}}).onKeyPreIme((event:KeyEvent) => {// 屏蔽音量使用下鍵if (event.keyCode == KeyCode.KEYCODE_VOLUME_DOWN) {return true;}this.text = 'onKeyPreIme KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText + '\nintentionCode:' + event.intentionCodereturn false;})Text(this.text).padding(15)}.height(300).width('100%').padding(35)}
}
擴展資料
點擊跳轉參考按鍵Code列表: