Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Soft Keyboard shows up on EditText focus ONLY once

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!

like image 426
Sagar Hatekar Avatar asked Sep 02 '11 21:09

Sagar Hatekar


People also ask

How do I enable soft keyboard on Android?

To enable your latest Android keyboard, scroll to the bottom and hit the System entry. Then, click Languages & input. Pick Virtual keyboard on the following page. You will find a list of all the existing keyboards on your smartphone here.

What is soft keyboard in Android?

A soft keyboard (sometimes called an onscreen keyboard or software keyboard ) is a system that replaces the hardware keyboard on a computing device with an on-screen image map .


2 Answers

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);
like image 176
Lalit Poptani Avatar answered Sep 28 '22 06:09

Lalit Poptani


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); 
}
like image 45
Ronnie Avatar answered Sep 28 '22 06:09

Ronnie