Android点击其他任意位置收起软键盘
最后更新 2021-02-27 16:46 星期六 所属:
安卓教程 浏览:576
在Android应用程序开发中,经常会出现那样的要求,客户在输入文字的全过程中,很有可能不愿再次键入了,根据滚动或是点一下别的部位(除软键盘和EditText之外的一切部位),期待可以全自动取回电脑键盘,这一作用很有可能有一些rom会自身完成了,可是绝大多数還是沒有自身完成这一作用的,那麼假如我们要自身完成,要如何解决呢?
最先,大家自然要先阻拦别的一切的客户触碰显示屏的事情,根据重写Activity的boolean dispatchTouchEvent(MotionEvent ev);但是完成阻拦客户的触碰事情。编码以下:
@Override public boolean dispatchTouchEvent(MotionEvent ev) { DisplayUtils.hideInputWhenTouchOtherView(this, ev, getExcludeTouchHideInputViews()); return super.dispatchTouchEvent(ev); }
DisplayUtils.hideInputWhenTouchOtherView方式便是我们自己完成的当必需情况下掩藏软键盘的编码了。有关hideInputWhenTouchOtherView的方式完成以下:
/** * 当点一下别的View时掩藏软键盘 * @param activity * @param ev * @param excludeViews 点一下这种View不容易开启掩藏软键盘姿势 */ public static final void hideInputWhenTouchOtherView(Activity activity, MotionEvent ev, List<View> excludeViews){ if (ev.getAction() == MotionEvent.ACTION_DOWN){ if (excludeViews != null && !excludeViews.isEmpty()){ for (int i = 0; i < excludeViews.size(); i ){ if (isTouchView(excludeViews.get(i), ev)){ return; } } } View v = activity.getCurrentFocus(); if (DisplayUtils.isShouldHideInput(v, ev)){ InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); if (inputMethodManager != null){ inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0); } } } }
方式主要参数中的excludeViews表明点一下那么View不容易去尝试掩藏软键盘,由于有一些View的触碰事情大家有时并不期待去掩藏软键盘,例如EditText的情况合理布局,闲聊文本框的推送按键等(假如摸一下推送按键,电脑键盘就取回来到简直很睾丸疼)
能够见到,全部方式方式的完成全过程便是根据分辨触碰部位是归属于哪一个View,如果是必须清除的View,就立即不解决了.假如分辨出去是点一下了别的随意非EditText的View,便会掩藏软键盘。别的2个分辨涵数以下:
public static final boolean isTouchView(View view, MotionEvent event){ if (view == null || event == null){ return false; } int[] leftTop = {0, 0}; view.getLocationInWindow(leftTop); int left = leftTop[0]; int top = leftTop[1]; int bottom = top view.getHeight(); int right = left view.getWidth(); if (event.getRawX() > left && event.getRawX() < right && event.getRawY() > top && event.getRawY() < bottom){ return true; } return false; } public static final boolean isShouldHideInput(View v, MotionEvent event){ if (v != null && (v instanceof EditText)){ return !isTouchView(v, event); } return false; }
根据多路复用hideInputWhenTouchOtherView() 方式(乃至你能在基类Activity里完成)就可以在一切Activity中以至少编码完成点一下别的随意部位收拢软键盘的作用了。假如编码有哪些必须纠正或是有更强的取代计划方案的,请大伙儿立即告之哈。