点击空白隐藏键盘

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);

相关文章
相关标签/搜索