在Android中如何通過點擊edittext之外的部分使軟鍵盤隱藏

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

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

    private void hideSoftKeyboard(Activity activity)
    {
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
    }

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

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

    private void SetOnTouch(View view)
    {
    if (!(view instanceof EditText))
    {
    view.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    hideSoftKeyboard(SharedPreferenceActivity.this);
    return false;
    }
    });
    }

    //遞歸監聽OnTouch事件
    if (!(view instanceof ViewGroup))
    {
    for (int i = 0; i < ((ViewGroup)view).getChildCount(); i++) {
    SetOnTouch(((ViewGroup)view).getChildAt(i));
    }
    }
    }

      總的來說,我們在執行了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

  • 原文轉自:http://www.it165.net/pro/html/201405/13742.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章