在android中如何經過點擊edittext以外的部分使軟鍵盤隱藏

  咱們知道在android中點擊edittext框就會自動彈出軟鍵盤,那怎麼經過點擊edittext以外的部分使軟鍵盤隱藏呢?(微信聊天時的輸入框就是這個效果,這個給用戶的體驗仍是很不錯的)android

  首先咱們要先定義一個隱藏軟鍵盤的工具類方法: 程序員

1 public static void hideSoftKeyboard(Activity activity) {
2     InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
3     inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
4 }

 

    接下來的問題是應該怎麼調用這個方法了,咱們能夠給咱們的activity中的每一個組件註冊一個OnTouchListener監聽器,這樣只要咱們手指接觸到了其餘組件,就會觸發OnTouchListener監聽器的onTouch方法,從而調用上面的隱藏軟鍵盤的方法來隱藏軟鍵盤。微信

  這裏還有一個問題就是若是activity中有不少組件怎麼辦,難不成每一個組件都要寫代碼去註冊這個OnTouchListener監聽器?大可沒必要,咱們只要找到根佈局,而後讓根佈局自動找到其子組件,再遞歸註冊監聽器便可,詳見下面代碼:ide

 1 public void setupUI(View view) {
 2         //Set up touch listener for non-text box views to hide keyboard.
 3         if(!(view instanceof EditText)) {
 4             view.setOnTouchListener(new OnTouchListener() {
 5                 public boolean onTouch(View v, MotionEvent event) {
 6                     hideSoftKeyboard(Main.this);  //Main.this是個人activity名
 7                     return false;
 8                 }
 9             });
10         }
11 
12         //If a layout container, iterate over children and seed recursion.
13         if (view instanceof ViewGroup) {
14             for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
15                 View innerView = ((ViewGroup) view).getChildAt(i);
16                 setupUI(innerView);
17             }
18         }
19     }

  總的來講,咱們在執行了actvity的oncreateview方法以後就調用setupUI(findViewById(R.id.root_layout))就能夠了(其中root_layout爲咱們的根佈局id)。是否是很簡單了?:)工具

  這裏要謝過stackoverflow上的大神(本文基本爲翻譯):http://stackoverflow.com/questions/4165414/how-to-hide-soft-keyboard-on-android-after-clicking-outside-edittext佈局

  建議廣大程序員們多用google,中文搜不到要試試英文搜索,好比這篇答案就是我用關鍵字「android hide keyboard click outside」搜出來的。this

相關文章
相關標籤/搜索