Android 完美的隱藏軟鍵盤方法

來源:互聯網
上載者:User

標籤:android   des   style   blog   class   ext   

最近有這麼一個需求:在點擊EditText時彈出軟鍵盤,然後在點擊空白處或者其他控制項的時候隱藏軟鍵盤。這個需求在平板電腦上非常實用,因為螢幕大,使用者不可能每次都點左下角去隱藏,並且點擊空白處更容易。

剛開始從網上搜尋,不是很理想,後來突然想到Android的事件分發機制,於是想到了實現方法:

 

publicclassHomeActivityextendsActivity{
     ......
     @Override
     publicboolean dispatchTouchEvent(MotionEvent ev){
         if(ev.getAction()==MotionEvent.ACTION_DOWN){
 
             // 獲得當前得到焦點的View,一般情況下就是EditText(特殊情況就是軌跡求或者實體案例會移動焦點)
             View v = getCurrentFocus();
 
             if(isShouldHideInput(v, ev)){
                 hideSoftInput(v.getWindowToken());
             }
         }
         returnsuper.dispatchTouchEvent(ev);
     }
 
     /**
      * 根據EditText所在座標和使用者點擊的座標相對比,來判斷是否隱藏鍵盤,因為當使用者點擊EditText時沒必要隱藏
      *
      * @param v
      * @param event
      * @return
      */
     privateboolean isShouldHideInput(View v,MotionEventevent){
         if(v !=null&&(v instanceofEditText)){
             int[] l ={0,0};
             v.getLocationInWindow(l);
             int left = l[0], top = l[1], bottom = top + v.getHeight(), right = left
                     + v.getWidth();
             if(event.getX()> left &&event.getX()< right
                     &&event.getY()> top &&event.getY()< bottom){
                 // 點擊EditText的事件,忽略它。
                 returnfalse;
             }else{
                 returntrue;
             }
         }
         // 如果焦點不是EditText則忽略,這個發生在視圖剛繪製完,第一個焦點不在EditView上,和使用者用軌跡球選擇其他的焦點
         returnfalse;
     }
 
     /**
      * 多種隱藏軟體盤方法的其中一種
      *
      * @param token
      */
     privatevoid hideSoftInput(IBinder token){
         if(token !=null){
             InputMethodManager im =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
             im.hideSoftInputFromWindow(token,
                     InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }
   ......
 }

下面解釋一下代碼,首先這個方法要實現Activity的dispatchTouchEvent方法,其實不一定是Acitivty,3.0的Fragment也可以,主要目的是攔截使用者觸摸事件。具體Android的事件分發機制請看我的另一個部落格:http://www.cnblogs.com/coding-way/archive/2012/07/04/2575769.html

現在,當使用者觸摸時,dispatchTouchEvent就會被調用,之後的方法都有比較詳細的注釋,不再贅述。

原文連結:http://www.cnblogs.com/coding-way/archive/2012/07/10/2585511.html

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.