Hide keypad in android while touching outside Edit Text Area

I know that the code for dismiss tyhe keypad in android is

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

Can anyone suggest me a method to hide the keypad if we touch the area outside the text area other than the keypad in the screen.

  • Google Maps Android API v2 throws GooglePlayServicesNotAvailableException, out of date, SupportMapFragment.getMap() returns null
  • Is there a Miracast Client/Server for Mac or Windows?
  • Add margin above top ListView item (and below last) in Android
  • Android Studio 0.4: Could not find method jniDir()
  • Cannot resolve symbol @drawable/ic_launcher
  • Drag and drop items in RecyclerView with GridLayoutManager
  • How to test custom URL scheme in android
  • android listview item height
  • What are Intent Filters exactly?
  • Can't convert to color: type=0x2 error when inflating layout in fragment but only on Samsung Galaxy and Note 4
  • Android install apk with Intent.VIEW_ACTION not working with File provider
  • Disable Button when Edit Text Fields empty
  • 3 Solutions collect form web for “Hide keypad in android while touching outside Edit Text Area”

    Code to dismiss Softkeyboard is below:

    public static void hideSoftKeyboard(Activity activity) {
        InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
    }
    

    You can put it in Utility Class or if you are defining it within an activity, avoid the activity parameter, or call hideSoftKeyboard(this).

    You can write a method that iterates through every View in your activity, and check if it is an instanceof EditText if it is not register a setOnTouchListener to that component and everything will fall in place. In case you are wondering how to do that, it is in fact quite simple. Here is what you do, you write a recursive method like the following.

    public void setupUI(View view) {
    
        //Set up touch listener for non-text box views to hide keyboard.
        if(!(view instanceof EditText)) {
    
            view.setOnTouchListener(new OnTouchListener() {
    
                public boolean onTouch(View v, MotionEvent event) {
                    hideSoftKeyboard();
                    return false;
                }
    
            });
        }
    
        //If a layout container, iterate over children and seed recursion.
        if (view instanceof ViewGroup) {
    
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
    
                View innerView = ((ViewGroup) view).getChildAt(i);
    
                setupUI(innerView);
            }
        }
    }
    

    Call this method after SetcontentView() with paramet as id of your view like:

    RelativeLayoutPanel android:id="@+id/parent"> ... </RelativeLayout>
    

    Then call setupUI(findViewById(R.id.parent))

    Best way you can use is DONE button besides EditText make your onClickListener to do like,

    done.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
    }
    });
    

    This may be old but I got this working by implenting a custom class

    public class DismissKeyboardListener implements OnClickListener { 
    
        Activity mAct;
    
        public DismissKeyboardListener(Activity act) {
            this.mAct = act;
        } 
    
        @Override 
        public void onClick(View v) {
            if ( v instanceof ViewGroup ) {
                hideSoftKeyboard( this.mAct );
            } 
        }        
    } 
    
    public void hideSoftKeyboard(Activity activity) {
            InputMethodManager imm = (InputMethodManager)
            getSystemService(Activity.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
    } 
    

    the best practice here is to create a Helper class and every container Relative / Linear Layouts should implement this.

    **** Take note only the main Container should implement this class (For optimization) ****

    and implement it like this :

    Parent.setOnClickListener( new DismissKeyboardListener(this) ); 
    

    the keyword this is for Activity. so if you are on fragment you use it like getActivity();

    —thumbs up if it help you… — cheers Ralph —

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.