Android 点击空白处自动隐藏输入法,适用activity与fragment

方法 1 : 简单但有时会无效
InputMethodManager manager= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
@Override 
public boolean onTouchEvent(MotionEvent event) {  
// TODO Auto-generated method stub  
if (event.getAction() == MotionEvent.ACTION_DOWN){    
if (getCurrentFocus()!= null && getCurrentFocus().getWindowToken()!= null ){     
manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);    
}  
}  
return super .onTouchEvent(event); 
}
 
方法 2 : 完美适用activity与fragment
 
// -------------------------------------隐藏输入法-----------------------------------------------------
     // 获取点击事件
     @Override
     public boolean dispatchTouchEvent(MotionEvent ev) {
         // TODO Auto-generated method stub
         if (ev.getAction() == MotionEvent.ACTION_DOWN) {
             View view = getCurrentFocus();
             if (isHideInput(view, ev)) {
                 HideSoftInput(view.getWindowToken());
             }
         }
         return super .dispatchTouchEvent(ev);
     }
     // 判定是否需要隐藏
     private boolean isHideInput(View v, MotionEvent ev) {
         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 (ev.getX() > left && ev.getX() < right && ev.getY() > top
                     && ev.getY() < bottom) {
                 return false ;
             } else {
                 return true ;
             }
         }
         return false ;
     }
     // 隐藏软键盘
     private void HideSoftInput(IBinder token) {
         if (token != null ) {
             InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
             manager.hideSoftInputFromWindow(token,
                     InputMethodManager.HIDE_NOT_ALWAYS);
         }
     }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值