1. Создал простую разметку с кнопкой и текстовым полем ввода
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:padding="40dp">
<Button
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="Show"
android:layout_width="fill_parent"></Button>
<EditText
android:layout_height="wrap_content"
android:id="@+id/edittext"
android:layout_width="fill_parent"></EditText>
</LinearLayout>
2. Собственно сам код:
EditText edit;
Button btn;
InputMethodManager imm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.input_method_manager_test);
imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
edit = (EditText) findViewById(R.id.edittext);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
imm.showSoftInput(edit, InputMethodManager.SHOW_FORCED);
}
});
}
}
Это конечно все хорошо, но этот код не будет работать если вам нужно показать клавиатуру при запуске активити.
Небольшое отступление. Поведение стандартной клавиатуры отличается на разных устройствах. Это зависит от наличия в устройстве физической клавиатуры.
– eсли нет физической клавиатуры, то программная по умолчанию будет автоматически отображаться, если фокус при запуске попадет на EditText.
– если физическая клавиатура есть, то программная будет спрятана при запуске.
Если нам нужно всегда отображать программную клавиатуру при запуске, поможет вот такой код:
private EditText myEditText;
/**
* прячем программную клавиатуру
*/
protected void hideInputMethod() {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
}
}
/**
* показываем программную клавиатуру
*/
protected void showInputMethod() {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(myEditText, 0);
}
}
private Runnable mShowInputMethodTask = new Runnable() {
public void run() {
showInputMethodForQuery();
}
};
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
// если окно в фокусе, то ждем еще немного и показываем клавиатуру
mHandler.postDelayed(mShowInputMethodTask, 0);
}
}

Posts
Странно, но никак не удаётся заставить показать клавиатуру, что на эмуляторе, что на телефоне. В чём может быть проблема?
| September 7, 2010 @ 19:06
Ты хочешь показать ее программно или как? А так она сама по себе отображается по клику на EditText
| September 7, 2010 @ 20:26
Да, программно. Чтобы запустилась activity и была уже открыта клавиатура.
| September 8, 2010 @ 10:53
Решил проблему заменой строки
imm.showSoftInput(edit, InputMethodManager.SHOW_FORCED);
на
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
| September 10, 2010 @ 13:45