解决方案 »

  1.   

    /**
     * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘,因为当用户点击EditText时没必要隐藏
     * 
     * @param v
     * @param event
     * @return
     */
    public static boolean isShouldHideInput(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 {
    // hideSoftInput(v.getWindowToken());
    return true;
    }
    }
    // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditView上,和用户用轨迹球选择其他的焦点
    return false;
    } /**
     * 多种隐藏软件盘方法的其中一种
     * 
     * @param token
     */
    public static void hideSoftInput(IBinder token, InputMethodManager im) {
    if (token != null) {
    im.hideSoftInputFromWindow(token,
    InputMethodManager.HIDE_NOT_ALWAYS);
    }
    }上面2个方法贴到公用类。
    在要用到的activity覆盖下面方法即可。
    /**
     * 隐藏软键盘
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
    // TODO Auto-generated method stub
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
    View v = getCurrentFocus(); if (DevilUtil.isShouldHideInput(v, ev)) {
    InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    DevilUtil.hideSoftInput(v.getWindowToken(), im);
    }
    }
    return super.dispatchTouchEvent(ev);
    }
      

  2.   

    你好  感谢你的回复,但是有个问题:按照你的方法导进去,DevilUtil这个类报错?不知为何,还往解释下,哇哈哈
      

  3.   

    那个类是我自己的代码。我不是让你把前面2个方法抽到公用类里,随便new个class,这里的devilutil替换成那个类就可以了
      

  4.   

    我有一个baseActivity基类,我把那两个方法放在基类里了,所有的activity都继承与baseActivity基类,这么说直接用父类调用那两个方法就好了?
      

  5.   

    这样更简单,直接在父类里实现dispatchTouchEvent这个方法就够了。
      

  6.   

    dispatchTouchEvent这个方法的代码你有吗!是否可以参考下,还有父类实现了这个方法,子类就不需要做什么操作了吗?
      

  7.   

    /**
         * 隐藏软键盘
         */
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
            // TODO Auto-generated method stub
            if (ev.getAction() == MotionEvent.ACTION_DOWN) {
     
                // 获得当前得到焦点的View,一般情况下就是EditText(特殊情况就是轨迹求或者实体案件会移动焦点)
                View v = getCurrentFocus();
     
                if (DevilUtil.isShouldHideInput(v, ev)) {
                    InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    DevilUtil.hideSoftInput(v.getWindowToken(), im);
                }
            }
            return super.dispatchTouchEvent(ev);
        }。不是就是这个嘛,我都贴给你了啊。只在父类实现就可以了。子类不用任何操作。
      

  8.   

    开始没仔细看,你的意思是点发送按钮也不隐藏?那你把dispatchTouchEvent这个方法改动下,把输入框和按钮放在一个layout,View v = getCurrentFocus();这里的view获取成那个leyout就可以了。你试试