最近遇到一個(gè)問題,就是無法監(jiān)控Android輸入法是否彈出,網(wǎng)上找了好多辦法,有監(jiān)聽global layout大小變化的,代碼如下
private void addKeybordListener() {
// 監(jiān)聽global layout的大小變化
final View activityRootView = findViewById(R.id.root); //此處是你頁(yè)面根布局
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight();
if (heightDiff > 100) { // 高度變小100像素則認(rèn)為鍵盤彈出
// 這里執(zhí)行需要的處理
}
}
});
但是這種監(jiān)聽的弊端就是只能進(jìn)來頁(yè)面監(jiān)聽一次,無法根據(jù)點(diǎn)擊一個(gè)按鈕時(shí)判斷出鍵盤是否彈出,后來我想通過一個(gè)布爾的變量,keyboardShow判斷鍵盤現(xiàn)在是否顯示,但是這樣控制邏輯很麻煩,也容易出錯(cuò),后來找到一個(gè)簡(jiǎn)單方式,就是獲取InputMethodManager,根據(jù)它的isActive判斷鍵盤是否顯示,代碼如下:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) { //如果為true,則是鍵盤正在顯示
HideKeyboard(mEtOrg); //隱藏鍵盤
}
隱藏鍵盤代碼如下
// 隱藏虛擬鍵盤
public static void HideKeyboard(View v) {
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
}