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

來源:互聯網
上載者:User

標籤:

剛開始在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在視窗上已經顯示,則隱藏,反之則顯示)

  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擷取IME開啟的狀態

  1. InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);  
  2. boolean isOpen=imm.isActive();//isOpen若返回true,則表示IME開啟  

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.