重写dispatchTouchEvent方法,实现EditText失去焦点后(点击其他地方)收起键盘的效果
来源:互联网 发布:plc简单编程实例 编辑:程序博客网 时间:2024/05/04 22:39
一、MotionEvent event
event.getX():表示的是触摸的点距离自身左边界的距离
event.getY():表示的是触摸的点距离自身上边界的距离
event.getRawX:表示的是触摸点距离屏幕左边界的距离
event.getRawY:表示的是触摸点距离屏幕上边界的距离
备注:以上方法的返回值均为float类型
二、View view
view.getWidth():表示的是当前控件的宽度,即getRight()-getLeft()
view.getHeight():表示的是当前控件的高度,即getBottom()-getTop()
view.getTop():子View的顶部到父View顶部的距离
view.getRight():子View的右边界到父View的左边界的距离
view.getBottom():子View的底部到父View的顶部的距离
view.getLeft():子View的左边界到父View的左边界的距离
view.getTranslationX()计算的是该View在X轴的偏移量。初始值为0,向左偏移值为负,向右偏移值为正。
view.getTranslationY()计算的是该View在Y轴的偏移量。初始值为0,向上偏移为负,向下偏移为证。
备注:以上方法的返回值均为int类型
资料参考链接:http://blog.csdn.net/dmk877/article/details/51550031
三、View view
view.getLocationInWindow(int[] location) 一个控件在其父窗口中的坐标位置
view.getLocationOnScreen(int[] location) 一个控件在其整个屏幕上的坐标位置
资料参考链接:http://blog.csdn.net/u010746364/article/details/50377875
四、在Activity中,重写dispatchTouchEvent方法,实现EditText失去焦点后(点击其他地方)收起键盘的效果,代码如下:
@Override public boolean dispatchTouchEvent(MotionEvent pEv) { if (pEv.getAction() == MotionEvent.ACTION_DOWN) { View view = getCurrentFocus(); if (isShouldHideInput(view, pEv)) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } } return super.dispatchTouchEvent(pEv); } // 必不可少,否则所有的组件都不会有TouchEvent了 if (getWindow().superDispatchTouchEvent(pEv)) { return true; } return onTouchEvent(pEv); } /** * EditText失去焦点后(点击其他地方),收起键盘 * @param pView * @param pEv * @return */ private boolean isShouldHideInput(View pView, MotionEvent pEv) { boolean isHidden = false; if (pView != null && pView instanceof EditText) { Log.v(TAG, "pViewID = " + pView.getId()); int[] leftTop = {0, 0}; // 获取输入框在当前屏幕上的位置 pView.getLocationOnScreen(leftTop); int left = leftTop[0]; int top = leftTop[1]; int bottom = top + pView.getHeight(); int right = left + pView.getWidth();// Log.v(TAG, "left = " + left + "\tright " + right + "\ttop = " + top + "\tbottom " + bottom); // 获取光标(触摸点)在当前屏幕上的位置 float locationX = pEv.getRawX(); float locationY = pEv.getRawY();// Log.v(TAG, "locationX = " + locationX + "\tlocationY " + locationY); if (locationX > left && locationX < right && locationY > top && locationY < bottom) { // 点击的是输入框区域,保留点击EditText事件 isHidden = false; } else { // 失去焦点 pView.clearFocus(); isHidden = true; } }// Log.v(TAG, "isShouldHideInput isHidden = " + isHidden); return isHidden; }
阅读全文
0 0
- 重写dispatchTouchEvent方法,实现EditText失去焦点后(点击其他地方)收起键盘的效果
- 点击屏幕其他地方让edittext失去焦点 的实现
- 点击屏幕其他地方让edittext失去焦点 的实现
- 点击屏幕其他地方让edittext失去焦点并隐藏输入法的实现方法
- 点击屏幕其他地方让edittext失去焦点并隐藏输入法的实现方法
- EditText失去焦点时,键盘收起的布局
- 点击除搜索框EditText外其他位置EditText失去焦点收起键盘
- listview内的edittext调出来键盘后,edittext失去焦点问题
- 点击页面其他地方取消EditText的焦点并且隐藏软键盘的方法
- EditText失去焦点,收起软键盘
- EditText失去焦点时收起软键盘
- 使EditText失去焦点的方法
- Android:实现EditText在获得焦点后消去hint,失去焦点后再显示原来的hint
- android 解决EditText无法失去焦点和失去焦点后隐藏软键盘的问题
- 让EditText失去焦点,进入后不会选中的解决方法
- 点击背景让键盘失去焦点 (消失)
- android EditText 点击空白失去焦点
- EditText点击在ListView中失去焦点
- 如果有一个类是 myClass , 关于下面代码正确描述的是?
- PAT-1079 Total Sales of Supply Chain (树的遍历)
- world front
- [自用门户]点击菜单变颜色
- Chrome提示:"请停用以开发者模式运行的扩展程序"的解决办法
- 重写dispatchTouchEvent方法,实现EditText失去焦点后(点击其他地方)收起键盘的效果
- CODE[VS] 1011 数的计算
- std::map的[]方法重写
- android 随记
- 浏览器兼容性问题解决方案 · 总结
- 非常的好的协同过滤入门文章
- flex 初学
- 如何关闭运行在某端口的的进程,例如 :8080端口
- Android runtime permission