0

I want the soft keyboard to disappear when the user touches anything other than the EditText on the screen. I've gone through SO posts on this question before and implemented the use of onFocusChangeListener and it did the trick on other projects I have worked on but it doesn't seem to be working now and I can't figure out what is wrong. Any help is appreciated.

My activity.java (inputGuardian1 is an example of the EditText):

inputGuardian1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean hasFocus) {
            if (!hasFocus) {
                InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                mgr.hideSoftInputFromWindow(inputGuardian1.getWindowToken(), 0);
            }
        }
    });

Layout xml file:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                             xmlns:app="http://schemas.android.com/apk/res-auto"
                                             android:layout_width="match_parent"
                                             android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />


<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingLeft="20dp"
        android:paddingRight="20dp" >
        <!--android:layout_marginTop="?attr/actionBarSize"-->


    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingLeft="20dp"
        android:paddingRight="20dp">

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_guardian1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/inputGuardian1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:imeOptions="actionDone"
                android:hint="Guardian 1" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_Guardian2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/inputGuardian2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:imeOptions="actionDone"
                android:hint="Guardian 2" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
        android:id="@+id/input_layout_Guardian3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/inputGuardian3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"
            android:imeOptions="actionDone"
            android:hint="Guardian 3" />
    </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_Guardian4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/inputGuardian4"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:imeOptions="actionDone"
                android:hint="Guardian 4" />
        </android.support.design.widget.TextInputLayout>
        </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:paddingTop="40sp"
        android:paddingLeft="20dp"
        android:paddingRight="20dp">

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_ChildName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <EditText
                android:id="@+id/inputChildName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:hint="Child's Name"
                android:layout_marginTop="30sp"
                android:imeOptions="actionDone"
                />

        </android.support.design.widget.TextInputLayout>



    </LinearLayout>

        <Button android:id="@+id/buttonNext"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="Next"
                android:background="@color/colorPrimary"
                android:layout_marginTop="40dp"
                android:textColor="@android:color/white" />

    </LinearLayout>
</ScrollView>

skbrhmn
  • 1,124
  • 1
  • 14
  • 36
  • 1
    refer http://stackoverflow.com/questions/4165414/how-to-hide-soft-keyboard-on-android-after-clicking-outside-edittext – Nikhil Aug 20 '16 at 08:59
  • Thanks. I solved the problem. I had to add the two attributes to all the containers: `android:clickable="true"` and `android:focusableInTouchMode="true"` – skbrhmn Aug 20 '16 at 09:51

1 Answers1

1

Setting android:clickable="true" and android:focusableInTouchMode="true" to all the containers solved the problem.

skbrhmn
  • 1,124
  • 1
  • 14
  • 36
  • Thank you so much - looked through at least 20 SO questions on this topic and you finally gave me a solution that worked. – Amin Mar 11 '20 at 16:50