EditText失去焦点隐藏软键盘
16lz
2021-01-23
1, 页面根布局加 android :focusable= "true" android :focusableInTouchMode= "true"
2.在activity里面重写 dispatchTouchEvent @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent. ACTION_DOWN ) { View v = getCurrentFocus(); if (ViewUtil. isShouldHideInput ( v, ev )) { InputMethodManager imm = (InputMethodManager) getSystemService( Context. INPUT_METHOD_SERVICE ); if (imm != null ) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0 ); } } return super .dispatchTouchEvent( ev ); } // 必不可少,否则所有的组件都不会有TouchEvent了 if (getWindow().superDispatchTouchEvent( ev )) { return true ; } return onTouchEvent( ev ); }
/** * 是否隐藏键盘 * @param v * @param event * @return */ public static boolean isShouldHideInput(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int [] leftTop = { 0 , 0 }; //获取输入框当前的location位置 v.getLocationInWindow( leftTop ); int left = leftTop[ 0 ]; int top = leftTop[ 1 ]; int bottom = top + v.getHeight(); int right = left + v.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 点击的是输入框区域,保留点击EditText的事件 return false ; } else { return true ; } } return false ; }
2.在activity里面重写 dispatchTouchEvent @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent. ACTION_DOWN ) { View v = getCurrentFocus(); if (ViewUtil. isShouldHideInput ( v, ev )) { InputMethodManager imm = (InputMethodManager) getSystemService( Context. INPUT_METHOD_SERVICE ); if (imm != null ) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0 ); } } return super .dispatchTouchEvent( ev ); } // 必不可少,否则所有的组件都不会有TouchEvent了 if (getWindow().superDispatchTouchEvent( ev )) { return true ; } return onTouchEvent( ev ); }
/** * 是否隐藏键盘 * @param v * @param event * @return */ public static boolean isShouldHideInput(View v, MotionEvent event) { if (v != null && (v instanceof EditText)) { int [] leftTop = { 0 , 0 }; //获取输入框当前的location位置 v.getLocationInWindow( leftTop ); int left = leftTop[ 0 ]; int top = leftTop[ 1 ]; int bottom = top + v.getHeight(); int right = left + v.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // 点击的是输入框区域,保留点击EditText的事件 return false ; } else { return true ; } } return false ; }
更多相关文章
- Android数据库组件Room
- 2010.12.19——— android 设置组件的高度
- UI组件之AdapterView及其子类(二)GridView网格视图的使用
- ReactNative 调用Android 原生(二)——原生组件
- android的四大组件及其生命周期