監(jiān)聽(tīng)鍵盤(pán)實(shí)時(shí)彈窗、收起狀態(tài),可以通過(guò)獲取鍵盤(pán)高度的變化來(lái)判定,也可以通過(guò)監(jiān)測(cè)當(dāng)前窗口系統(tǒng)規(guī)避區(qū)域的變化,兩種方式皆可;
監(jiān)測(cè)鍵盤(pán)高度變化
/**
* 監(jiān)聽(tīng)鍵盤(pán)顯示或隱藏狀態(tài)
* state : 0 收起 & 1 彈出 & 2 變更
* keyboardHeight : 鍵盤(pán)高度 number
* V3.4.62
* 20250306
* */
static listenKeyboardState() {
console.info('[事件監(jiān)聽(tīng)] - 鍵盤(pán)');
/**
* 通過(guò) window 模塊的 on('keyboardHeightChange')方法
* 監(jiān)聽(tīng)軟鍵盤(pán)高度變化,實(shí)時(shí)獲取軟鍵盤(pán)高度,默認(rèn)初始隱藏狀態(tài)為 0
* */
let keyboardHeight: number = 0; // 軟鍵盤(pán)高度
window.getLastWindow(getContext(_this)).then(currentWindow => {
currentWindow.on('keyboardHeightChange', (data: number) => {
keyboardHeight = px2vp(data);
console.info(`[事件監(jiān)聽(tīng)] - 鍵盤(pán) - 高度: ${keyboardHeight}`);
if (0 == keyboardHeight) {
console.info('[事件監(jiān)聽(tīng)] - 鍵盤(pán) - 收起');
// 通知對(duì)應(yīng)模塊業(yè)務(wù)當(dāng)前狀態(tài)
EmitterCenter.shareInstance().post(EmitterKey.Emitter_KeyboardChangeState, new Object({
state: '0',
keyboardHeight: keyboardHeight,
}));
} else {
console.info('[事件監(jiān)聽(tīng)] - 鍵盤(pán) - 彈出');
// 通知對(duì)應(yīng)模塊業(yè)務(wù)當(dāng)前狀態(tài)
EmitterCenter.shareInstance().post(EmitterKey.Emitter_KeyboardChangeState, new Object({
state: '1',
keyboardHeight: keyboardHeight,
}));
}
});
});
}
監(jiān)測(cè)窗口系統(tǒng)規(guī)避去變化
/**
* 監(jiān)聽(tīng)鍵盤(pán)顯示或隱藏狀態(tài)
* state : 0 收起 & 1 彈出 & 2 變更
* keyboardHeight : 鍵盤(pán)高度 number
* V3.4.62
* 20250306
* */
static listenKeyboardState() {
console.info('[事件監(jiān)聽(tīng)] - 鍵盤(pán)');
/**
* 通過(guò) window 模塊的 on('avoidAreaChange')方式
* 開(kāi)啟當(dāng)前窗口系統(tǒng)規(guī)避區(qū)變化的監(jiān)聽(tīng),獲取內(nèi)容可視區(qū)域大小;
* 以此來(lái)監(jiān)聽(tīng)軟鍵盤(pán)彈出與收起狀態(tài).
* */
let screenHeight: number = 0; // 安全區(qū)域高度
let isKeyBoardHidden: boolean = false; // 軟鍵盤(pán)是否隱藏
window.getLastWindow(getContext(_this)).then(currentWindow => {
let property = currentWindow.getWindowProperties();
let avoidArea = currentWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_KEYBOARD);
// 初始化顯示區(qū)域高度
screenHeight = px2vp(property.windowRect.height - avoidArea.topRect.height - avoidArea.bottomRect.height);
// 開(kāi)啟當(dāng)前窗口系統(tǒng)規(guī)避區(qū)變化的監(jiān)聽(tīng)
currentWindow.on('avoidAreaChange', data => {
if (data.type !== window.AvoidAreaType.TYPE_KEYBOARD) {
return;
}
if (0 >= data.area.bottomRect.height) {
isKeyBoardHidden = true;
console.info('[事件監(jiān)聽(tīng)] - 鍵盤(pán) - 隱藏');
} else {
isKeyBoardHidden = false;
console.info('[事件監(jiān)聽(tīng)] - 鍵盤(pán) - 顯示');
}
screenHeight = px2vp(property.windowRect.height - data.area.topRect.height - data.area.bottomRect.height);
console.info(`[事件監(jiān)聽(tīng)] - Screen height: ${screenHeight}`);
});
});
}
以上便是此次分享的全部?jī)?nèi)容,希望能對(duì)大家有所幫助!