標籤:
剛開始在onconfigurationChanged中監聽,結果發現該方法在configuration變化即設定檔發生變化時才會被調用,如橫豎屏切換,android重新載入設定檔時。而鍵盤隱藏不會觸發該方法。
後來採用如下方法完美解決了鍵盤隱藏監聽事件。
//該Activity的最外層Layout
finalView activityRootView = findViewById(R.id.activityRoot);
//給該layout設定監聽,監聽其布局發生變化事件
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(newOnGlobalLayoutListener(){
@Override
publicvoid onGlobalLayout(){
//比較Activity根布局與當前布局的大小
int heightDiff = activityRootView.getRootView().getHeight()- activityRootView.getHeight();
//其實這個heightDiff換成dp更靠譜一些
if(heightDiff >100){
//大小超過100時,一般為顯示虛擬鍵盤事件
}else{
//大小小於100時,為不顯示虛擬鍵盤或虛擬鍵盤隱藏
}
}
});
1、方法一(如果IME在視窗上已經顯示,則隱藏,反之則顯示)
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
2、方法二(view為接受軟鍵盤輸入的視圖,SHOW_FORCED表示強制顯示)
- InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(view,InputMethodManager.SHOW_FORCED); //顯示鍵盤
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //強制隱藏鍵盤
4擷取IME開啟的狀態
- InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
- boolean isOpen=imm.isActive();//isOpen若返回true,則表示IME開啟
android監聽虛擬鍵盤隱藏和顯示事件