为了体验便捷一些,今天想实现店家Edittext意外的区域使弹出的键盘消失,经过查找,大致有俩种方法可以采用,都是采用点击edittext意外的区域,键盘消失,但这俩种又有很大区别。

第一种:

InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  @Override      public boolean onTouchEvent(MotionEvent event) {          // TODO Auto-generated method stub          if (event.getAction() == MotionEvent.ACTION_DOWN) {              if (myActivity.this.getCurrentFocus() != null) {                  if (myActivity.this.getCurrentFocus().getWindowToken() != null) {                      imm.hideSoftInputFromWindow(myActivity.this.getCurrentFocus().getWindowToken(),                              InputMethodManager.HIDE_NOT_ALWAYS);                  }              }          }          return super.onTouchEvent(event);      }  

       这种方法可以实现点击EditText意外的区域键盘消失,但这种方法实现很受限制,如果界面上有很多控件,点击除这个EditText意外的控件,键盘就不会隐藏;

第二种,这种方法是判断当前的点击位置,判断是否再当前的Edittext上,不是的话就让键盘消失。

    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        if (ev.getAction() == MotionEvent.ACTION_DOWN) {            View v = getCurrentFocus();            if (isShouldHideKeyboard(v, ev)) {                hideKeyboard(v.getWindowToken());            }        }        return super.dispatchTouchEvent(ev);    }     /**     * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时则不能隐藏     *     * @param v     * @param event     * @return     */    private boolean isShouldHideKeyboard(View v, MotionEvent event) {        if (v != null && (v instanceof EditText)) {            int[] l = {0, 0};            v.getLocationInWindow(l);            int left = l[0],                top = l[1],                bottom = top + v.getHeight(),                right = left + v.getWidth();            if (event.getX() > left && event.getX() < right                    && event.getY() > top && event.getY() < bottom) {                // 点击EditText的事件,忽略它。                return false;            } else {                return true;            }        }        // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点        return false;    }     /**     * 获取InputMethodManager,隐藏软键盘     * @param token     */    private void hideKeyboard(IBinder token) {        if (token != null) {            InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);            im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);        }    }    



更多相关文章

  1. android studio3.1.2 gradle升级的坑以及android studio卡顿调优
  2. Android卡片组件(CardView)
  3. Android(安卓)软键盘自动弹出和关闭
  4. Dialog对话框(此5种)
  5. Android仿IOS提示框
  6. EditText被键盘遮住的问题
  7. Android(安卓)TextView部分文字实现点击事件
  8. 关于 android:windowSoftInputMode 的设置
  9. Android(安卓)中NavigationView的使用

随机推荐

  1. Android(安卓)Studio gradle仓储变更
  2. Android:获取系统缓存
  3. Android(安卓)Studio打包时候报错:app:li
  4. React Native项目编译通不过, 出现 The "a
  5. Android(安卓)View框架总结(一)
  6. android中layout_weight的理解
  7. 如何设置Android的AVD模拟器可以输入中文
  8. 使用Android注解处理器,解放劳动力
  9. ANDROID ADB工具使用
  10. 基于Android扫描sd卡与系统文件的介绍