剛開始在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、方法一(如果輸入法在窗口上已經顯示,則隱藏,反之則顯示)
- 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獲取輸入法打開的狀態
- InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
- boolean isOpen=imm.isActive();//isOpen若返回true,則表示輸入法打開