android監聽虛擬鍵盤隱藏和顯示事件

剛開始在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、方法一(如果輸入法在窗口上已經顯示,則隱藏,反之則顯示)

  1. InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
  2. imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

2、方法二(view爲接受軟鍵盤輸入的視圖,SHOW_FORCED表示強制顯示)

  1. InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
  2. imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);  //顯示鍵盤
  1. imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //強制隱藏鍵盤  

4獲取輸入法打開的狀態

  1. InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);  
  2. boolean isOpen=imm.isActive();//isOpen若返回true,則表示輸入法打開  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章