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. 解决Cocos2d-x3.1编译生成Android程序出现Android(安卓)NDK:Abor
  2. Android(安卓)studio图片ERROR: 9-patch image xx .9.png malfor
  3. Android(安卓)Dialog 创建上下文菜单
  4. android 计算器,纯手打,功能实现了,bug可能还有点
  5. Android(安卓)ContextMenu上下文菜单
  6. Android(安卓)仿支付宝密码输入页面
  7. Android适配底部虚拟键盘遮挡布局的解决方案
  8. Android(安卓)实现旋转键盘的例子
  9. android EditText 不自动弹出键盘的方法

随机推荐

  1. Android(安卓)Kill App
  2. Duplicate files copied in APK META-INF
  3. Android利用TTF文件设置字体
  4. android 从webview中读取缓存的图片
  5. 【转载】Using SQLite from Shell in And
  6. Android移植--启动篇
  7. Android手动切换屏幕方向
  8. Android依赖库版本不一致
  9. Android(安卓)ListView实现任意layout
  10. AndroidFragment切换