[轉]Android 完美的隱藏軟鍵盤方法 點擊編輯框外軟鍵盤消失

來源:互聯網
上載者:User

標籤:

 

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

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

 

public class HomeActivity extends Activity {     ......     @Override     public boolean dispatchTouchEvent(MotionEvent ev) {         if (ev.getAction() == MotionEvent.ACTION_DOWN) {              // 獲得當前得到焦點的View,一般情況下就是EditText(特殊情況就是軌跡求或者實體案例會移動焦點)             View v = getCurrentFocus();              if (isShouldHideInput(v, ev)) {                 hideSoftInput(v.getWindowToken());             }         }         return super.dispatchTouchEvent(ev);     }      /**      * 根據EditText所在座標和使用者點擊的座標相對比,來判斷是否隱藏鍵盤,因為當使用者點擊EditText時沒必要隱藏      *       * @param v      * @param event      * @return      */     private boolean isShouldHideInput(View v, MotionEvent event) {         if (v != null && (v instanceof EditText)) {             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的事件,忽略它。                 return false;             } else {                 return true;             }         }         // 如果焦點不是EditText則忽略,這個發生在視圖剛繪製完,第一個焦點不在EditView上,和使用者用軌跡球選擇其他的焦點         return false;     }      /**      * 多種隱藏軟體盤方法的其中一種      *       * @param token      */     private void 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

[轉]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.