19

Thanks for reading.

I am facing a strange problem: My app behavior is such that when the Activity starts, I requestFocus() on an EditText and show the soft keyboard.

However, when I press the back button to dismiss the keyboard and tap the EditText I don't get the keyboard to pop up ever again. Only way out is to the start the Activity again.

Here's what my code looks like:


EditText editText = (EditText) findViewById(R.id.editText);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if(imm != null) {
            imm.toggleSoftInput(0, 0);
            imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);    
        }

And here's my XML:


<EditText android:id="@+id/editText" 
        android:layout_width="wrap_content"
        android:imeOptions="actionSearch" android:hint="Test Hint"
        android:layout_height="wrap_content" android:layout_centerHorizontal="true" 
        android:maxLength="30"> 
</EditText>

Any help would be greatly appreciated!

Thanks!

Sagar Hatekar
  • 8,700
  • 14
  • 56
  • 72

6 Answers6

60

Try to open and hide inside a Runnable as,

TO OPEN

                 ettext.requestFocus();
                 ettext.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager keyboard = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                        keyboard.showSoftInput(ettext, 0);
                    }
                },200);

TO CLOSE

                    ettext.requestFocus();
                    ettext.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager keyboard = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                        keyboard.hideSoftInputFromWindow(ettext.
                                                         getWindowToken(), 0);
                    }
                },200);
Lalit Poptani
  • 67,150
  • 23
  • 161
  • 242
6

You used the wrong view for showing the input window.

EditText editText = (EditText) findViewById(R.id.editText);
editText.requestFocus();
InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) {
    imm.showSoftInput(editText, 0); 
}
Ron
  • 24,175
  • 8
  • 56
  • 97
  • thanks for pointing out, I just corrected it. It was a typo while framing the question. But original code has correct view. – Sagar Hatekar Sep 05 '11 at 04:01
4

try this:

final InputMethodManager imm = (InputMethodManager)EnterWordsActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null)
    {
        imm.toggleSoftInput(YOUE_EDTITE_TEXT.SHOW_FORCED,1);
    }
Shreyash Mahajan
  • 23,386
  • 35
  • 116
  • 188
1

None of above work until i clear the forces textField.clearFocus(); before requesting focus, so my final code in onResume looks like this.

   @Override
    public void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
        resumed = true;
        textField.postDelayed(new Runnable() {
            @Override
            public void run() {
                textField.clearFocus();
                textField.requestFocus();
                if (!editMode)
                    textField.getText().clear();
                inputMathodType = SharedPref.read(SharedPref.KEY_INPUT_MATHOD_SHARED_PREF, -1);
                setInputMethod();

            }
        }, 200);
    }
Hamza
  • 2,017
  • 1
  • 19
  • 40
0

Used this coding in your Activity,It will hide your keyboard this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Jagan
  • 692
  • 1
  • 12
  • 38
0

I faced the same problems for days. Solutions provided with creating threads and delays in the code are not efficient. The framework has solution. you can check my short solution here: https://stackoverflow.com/a/74442682/6906562

Araz
  • 151
  • 2
  • 11