当前位置:天才代写 > tutorial > 安卓教程 > Android点击其他任意位置收起软键盘

Android点击其他任意位置收起软键盘

2021-02-27 16:46 星期六 所属: 安卓教程 浏览:508

  在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中以至少编码完成点一下别的随意部位收拢软键盘的作用了。假如编码有哪些必须纠正或是有更强的取代计划方案的,请大伙儿立即告之哈。

 

    关键字:

天才代写-代写联系方式