点击EditText以外的位置 软键盘消失

//获取当前点击位置是否为edittext

/ * *
      * 获取当前点击位置是否为et
      * @param view 焦点所在View
      * @param event 触摸事件
      * @ return
      * /
     public  boolean isClickEt ( View view , MotionEvent event ) {
         if ( view ! = null & & ( view instanceof EditText ) ) {
             int[] leftTop = { 0 , 0 } ;
             / / 获取输入框当前的 location 位置
             view .getLocationInWindow ( leftTop ) ;
             int left = leftTop[ 0 ];
             int top = leftTop[ 1 ];
             / / 此处根据输入框左上位置和宽高获得右下位置
             int bottom = top + view .getHeight ( ) ;
             int right = left + view .getWidth ( ) ;
             if ( event .getX ( ) > left & & event .getX ( ) < right
                     & & event .getY ( ) > top & & event .getY ( ) < bottom ) {
                 / / 点击的是输入框区域,保留点击EditText的事件
                 return false ;
             } else {
                 return true ;
             }
         }
         return false ;
     }


/ * *
      * 點擊EditText以外的區域后鍵盤隱藏
      * /
     @Override
     public boolean dispatchTouchEvent ( MotionEvent event ) {
         if ( event .getAction ( ) = = MotionEvent.ACTION_DOWN ) {
 
             / / 获取当前获得当前焦点所在View
             View view = getCurrentFocus ( ) ;
             if ( isClickEt ( view , event ) ) {
 
                 / / 如果不是edittext,则隐藏键盘
 
                 InputMethodManager inputMethodManager = ( InputMethodManager ) getSystemService ( Context.INPUT_METHOD_SERVICE ) ;
                 if ( inputMethodManager ! = null ) {
                     / / 隐藏键盘
                     inputMethodManager.hideSoftInputFromWindow ( view .getWindowToken ( ) , 0 ) ;
                 }
             }
             return super.dispatchTouchEvent ( event ) ;
         }
         / * *
          * 看源码可知superDispatchTouchEvent  是个抽象方法,用于自定义的Window
          * 此处目的是为了继续将事件由dispatchTouchEvent ( MotionEvent event ) 传递到onTouchEvent ( MotionEvent event )
          * 必不可少,否则所有组件都不能触发 onTouchEvent ( MotionEvent event )
          * /
         if ( getWindow ( ) .superDispatchTouchEvent ( event ) ) {
             return true ;
         }
         return onTouchEvent ( event ) ;
     }
 
}


转载于:https://my.oschina.net/u/573928/blog/597234

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值