Skip to content

Working with the Soft Keyboard

Roger Hu edited this page Nov 17, 2015 · 34 revisions

The Android system shows an on-screen keyboard, known as a soft input method, when a text field in your UI receives focus. To provide the best user experience, you can specify characteristics about the type of input you expect (such as whether it's a phone number or email address) and how the input method should behave (such as whether it performs auto-correct for spelling mistakes).

Displaying the Soft Keyboard

AVD Manager

By default, the soft keyboard may not appear on the emulator. If you want to test with the soft keyboard, be sure to open up the Android Virtual Device Manager (Tools => Android => AVD Manager) and uncheck "Enable Keyboard Input" for your emulator.

Now restart the emulator. See these screenshots for a visual reference.

Genymotion

If you are using Genymotion, you need to click on the gear icon () on the emulator image and check Use virtual keyboard for text input before starting the emulator.

Showing Soft Keyboard Programmatically

The following code will reveal the soft keyboard focused on a specified view:

public void showSoftKeyboard(View view){
    if(view.requestFocus()){
        InputMethodManager imm =(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(view,InputMethodManager.SHOW_IMPLICIT);
    }
}

Hiding the Soft Keyboard Programmatically

You can force Android to hide the virtual keyboard using the InputMethodManager, calling hideSoftInputFromWindow, passing in the token of the window containing your edit field.

public void hideSoftKeyboard(View view){
  InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
  imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

This will force the keyboard to be hidden in all situations.

Adding a "Done" Key

In the keyboard, you can hide the "Next" key and add "Done" instead by adding the following to the imeOptions for the EditText view:

<EditText
  android:imeOptions="actionDone">
</EditText>

or in Java:

myEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

See the EditText documentation for a more detailed look at imeOptions.

Showing the Keyboard when Activity Starts

Although Android gives focus to the first text field in your layout when the activity starts, it does not show the soft keyboard. To show the keyboard when your activity starts, add the android:windowSoftInputMode attribute to the <activity> element with the "stateVisible" value within the Android manifest. Check out this guide for more details.

<activity
    android:name="com.example.myactivity"
    android:windowSoftInputMode="stateVisible" />

We can also use this to change the way that the soft keyboard displaces the view when it appears as well with:

<activity
    android:name="com.example.myactivity"
    android:windowSoftInputMode="stateVisible|adjustResize" />

See the guide on keyboard visibility for more details.

References

Finding these guides helpful?

We need help from the broader community to improve these guides, add new topics and keep the topics up-to-date. See our contribution guidelines here and our topic issues list for great ways to help out.

Check these same guides through our standalone viewer for a better browsing experience and an improved search. Follow us on twitter @codepath for access to more useful Android development resources.

Clone this wiki locally