點擊空白隱藏鍵盤

import android.content.Context;java

import android.os.Bundle;android

import android.os.IBinder;app

import android.support.v7.app.AppCompatActivity;ide

import android.view.MotionEvent;this

import android.view.View;spa

import android.view.inputmethod.InputMethodManager;.net

import android.widget.EditText;code

 

/**token

  * Created by J!nl!n on 15/5/21.事件

  */

public abstract class BaseActivity extends AppCompatActivity {

     @Override

     protected void onCreate(Bundle savedInstanceState) {

         super .onCreate(savedInstanceState);

         iniView();

     }

 

     public abstract void iniView();

 

     @Override

     public boolean dispatchTouchEvent(MotionEvent ev) {

         if (ev.getAction() == MotionEvent.ACTION_DOWN) {

             View v = getCurrentFocus();

             if (isShouldHideKeyboard(v, ev)) {

                 hideKeyboard(v.getWindowToken());

             }

         }

         return super .dispatchTouchEvent(ev);

     }

 

     /**

      * 根據EditText所在座標和用戶點擊的座標相對比,來判斷是否隱藏鍵盤,由於當用戶點擊EditText時則不能隱藏

      *

      * @param  v

      * @param  event

      * @return

      */

     private boolean isShouldHideKeyboard(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則忽略,這個發生在視圖剛繪製完,第一個焦點不在EditText上,和用戶用軌跡球選擇其餘的焦點

         return false ;

     }

 

     /**

      * 獲取InputMethodManager,隱藏軟鍵盤

      * @param token

      */

     private void hideKeyboard(IBinder token) {

         if (token != null ) {

             InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

             im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);

         }

     }

}

</code>

另外一種方法::::

<code class = "hljs" java= "" > // 點擊空白區域 自動隱藏軟鍵盤

     public boolean onTouchEvent(MotionEvent event) {

         if ( null != this .getCurrentFocus()){

             /**

              * 點擊空白位置 隱藏軟鍵盤

              */

             InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);

             return mInputMethodManager.hideSoftInputFromWindow( this .getCurrentFocus().getWindowToken(), 0 );

         }

         return super .onTouchEvent(event);

     }</code>

在須要時手動彈出軟鍵盤

 inputContentView.requestFocus();

                            InputMethodManager m = (InputMethodManager) inputContentView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

                            m.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

相關文章
相關標籤/搜索