600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android点击空白处隐藏软键盘

Android点击空白处隐藏软键盘

时间:2019-10-11 06:35:45

相关推荐

Android点击空白处隐藏软键盘

首先声明下,以下内容主要参考自/kf/05/401382.html

由于部分代码实际使用过程中有些问题,做了部分更改,主要在方法2:

1. 一般直接使用如下方式即可

@Overridepublic boolean onTouchEvent(MotionEvent event) {if(event.getAction() == MotionEvent.ACTION_DOWN &&getCurrentFocus()!=null && getCurrentFocus().getWindowToken()!=null ){InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);}return super.onTouchEvent(event);}

2. 如果第一种方法没效果,可以在activity中加入(上面的就不要了)

@Overridepublic boolean dispatchTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN &&getCurrentFocus()!=null &&getCurrentFocus().getWindowToken()!=null) {View v = getCurrentFocus();if (isShouldHideKeyboard(v, event)) {hideKeyboard(v.getWindowToken());}}return super.dispatchTouchEvent(event);}/*** 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏*/private boolean isShouldHideKeyboard(View v, MotionEvent event) {if (v != null && (v instanceof EditText)) {int[] l = {0, 0};v.getLocationOnScreen(l);int left = l[0],top = l[1],bottom = top + v.getHeight(),right = left + v.getWidth();if (event.getRawX() > left && event.getRawX() < right&& event.getRawY() > top && event.getRawY() < bottom) {// 点击EditText的事件,忽略它。return false;} else {return true;}}// 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点return false;}/*** 获取InputMethodManager,隐藏软键盘*/private void hideKeyboard(IBinder token) {if (token != null) {InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);inputMethodManager.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);}}

主要的改变在于

1)取点击event坐标的时候使用的是getRawX、getRawY,表示相对于屏幕的绝对坐标。

关于其他的方法见/s/blog_5da93c8f0100tlol.html,但实际效果可能有差距,需自行测试。

2)获取EditText控件的坐标,使用了getLocationOnScreen,表示这个view左上角相对于屏幕的绝对坐标,getLocationInWindow 计算该视图在它所在的widnow的坐标x、y值,这个也自行测试吧...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。