Android EditTextテキストボックスをクリックして、キーボードとカーソルを隠す解決策

4719 ワード

便利さを体験するために、今日は店のEdittextの意外な領域を実現して弾き出すキーボードを消したいと思っています.検索したところ、大体2つの方法が採用できます.いずれもedittextの意外な領域をクリックしてキーボードを消しますが、この2つには大きな違いがあります.
1つ目:
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     ,       ;

2つ目は、現在のクリック位置を判断し、現在のEdittext上にあるかどうかを判断し、そうでなければキーボードを消す方法です.
@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            View v = getCurrentFocus();
            // isShouldHideInput(v, ev) true ,           ,       ,      ,  ,      、  
            if (isShouldHideInput(v, ev)) {

                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    //  Editext     、    
                    mEdtFind.clearFocus();
                }
            }
            return super.dispatchTouchEvent(ev);
        }
        //     ,           TouchEvent 
        if (getWindow().superDispatchTouchEvent(ev)) {
            return true;
        }
        return onTouchEvent(ev);
    }

    public  boolean isShouldHideInput(View v, MotionEvent event) {
        if (v != null && (v instanceof EditText)) {
            int[] leftTop = { 0, 0 };
            //        location  
            v.getLocationInWindow(leftTop);
            int left = leftTop[0];
            int top = leftTop[1];
            int bottom = top + v.getHeight();
            int right = left + v.getWidth();
            if (event.getX() > left && event.getX() < right
                    && event.getY() > top && event.getY() < bottom) {
                //          ,    EditText   
                return false;
            } else {
                return true;
            }
        }
        return false;
    }

参照元アドレス:https://blog.csdn.net/ITYDXTOCATTLE/article/details/51003382