欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中点击隐藏软键盘最佳方法

程序员文章站 2024-02-17 16:39:34
实现功能:点击edittext,软键盘出现并且不会隐藏,点击或者触摸edittext以外的其他任何区域,软键盘被隐藏; 1、重写dispatchtouchevent()方...

实现功能:点击edittext,软键盘出现并且不会隐藏,点击或者触摸edittext以外的其他任何区域,软键盘被隐藏;

1、重写dispatchtouchevent()方法,获取当前触摸事件为down的时候隐藏软键盘

@override
  public boolean dispatchtouchevent(motionevent ev) {
    //finger touch screen event
    if (ev.getaction() == motionevent.action_down) {
      // get current focus,generally it is edittext
      view view = getcurrentfocus();
      if (isshouldhidesoftkeyboard(view, ev)) {
        hidesoftkeyboard(view.getwindowtoken());
      }
    }
    return super.dispatchtouchevent(ev);
  }

2、isshouldhideinput()方法;

/**
   * judge what situation hide the soft keyboard,click edittext view should show soft keyboard
   * @param v incident event
   * @param event 
   * @return
   */
  private boolean isshouldhidesoftkeyboard(view view, motionevent event) {
    if (view != null && (view instanceof edittext)) {
      int[] l = { 0, 0 };
      view.getlocationinwindow(l);
      int left = l[0], top = l[1], bottom = top +view.getheight(), right = left
          + view.getwidth();
      if (event.getx() > left && event.getx() < right
          && event.gety() > top && event.gety() < bottom) {
        // if click the edittext event ,ignore it
        return false;
      } else {
        return true;
      }
    }
    // if the focus is edittext,ignore it; 
    return false;
  }

3、hidesoftkeyboard()方法;

/**
   * hide soft keyboard
   * @param token
   */
  private void hidesoftkeyboard(ibinder token) {
    if (token != null) {
      inputmethodmanager im = (inputmethodmanager) getsystemservice(context.input_method_service);
      im.hidesoftinputfromwindow(token,
  inputmethodmanager.hide_not_always);
    }
  }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!