1.之前是这样写的方法

publicvoid closeKeyBoard() {
              InputMethodManagerimm = (InputMethodManager) LoginActivity.this
                            .getSystemService(Context.INPUT_METHOD_SERVICE);
              if(imm.isActive()) {
                     imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
                                   InputMethodManager.HIDE_NOT_ALWAYS);
              }      }

不完美的地方:每次点击空白区域,有键盘的话就消失,没键盘的话就出现,理想状态是,点击空白区域,键盘消失。

 

2.通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏

最终通过该方法实现,点击空白区域键盘消失。

InputMethodManagerimm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

 

3.通过dispatchTouchEvent每次ACTION_DOWN事件中动态判断非EditText本身区域的点击事件,然后在事件中进行屏蔽

@Override
    public booleandispatchTouchEvent(MotionEvent ev) {
       // TODO Auto-generated methodstub
        if (ev.getAction() ==MotionEvent.ACTION_DOWN) {  
               View v= getCurrentFocus();  
               if(isShouldHideInput(v, ev)) {         
                  InputMethodManager imm = (InputMethodManager)        getSystemService(Context.INPUT_METHOD_SERVICE); 
                  if (imm != null) {  
                      imm.hideSoftInputFromWindow(v.getWindowToken(), 0); 
                  }          }  
               returnsuper.dispatchTouchEvent(ev);  
           }  
           // 必不可少,否则所有的组件都不会有TouchEvent了  
           if(getWindow().superDispatchTouchEvent(ev)) {  
               returntrue;  
           }  
                       returnonTouchEvent(ev); 
    }
    public  booleanisShouldHideInput(View v, MotionEvent event) {  
        if (v != null&& (v instanceof EditText)) {  
            int[]leftTop = { 0, 0 };  
            //获取输入框当前的location位置  
           v.getLocationInWindow(leftTop);  
            intleft = leftTop[0];  
            inttop = leftTop[1];  
            intbottom = top + v.getHeight();  
            intright = left + v.getWidth();  
            if(event.getX() > left && event.getX() < right  
                   && event.getY() > top &&event.getY() < bottom) {  
               // 点击的是输入框区域,保留点击EditText的事件  
               return false;  
            } else{  
               return true;  
            } 
        }  
        return false;  
    }  

 


更多相关文章

  1. Android 实现旋转键盘的例子
  2. Android适配底部虚拟键盘遮挡布局的解决方案
  3. android EditText 不自动弹出键盘的方法
  4. view随着键盘移动
  5. Android 手动显示和隐藏软键盘 android 隐藏显示输入法键盘
  6. android framework 输入事件分析
  7. android hover监控鼠标移动事件
  8. 使用 EditText来调用软键盘的搜索功能

随机推荐

  1. android 内存占用 分析工具
  2. Android(安卓)短信模块分析(八) MMS数据
  3. android opengl es 纹理贴图资料
  4. android Inflater
  5. Android自定义组件系列【11】——实现3D
  6. [置顶] android仿最新版本微信相册--附源
  7. Android(安卓)获取、移除 View 的 OnClic
  8. Android中使用SerialPort读取红外温度传
  9. Gradle、 Gradle Android(安卓)Plugin 、
  10. Android(安卓)studio gradle系列二.