У меня была похожая проблема с программной клавиатурой;хотя в моем случае это не показывалось бы даже без переключения представлений с setContentView.После некоторых экспериментов я нашел решение, которое все еще работает для меня.Идея заключалась в том, чтобы перехватить отображение / скрытие программной клавиатуры для любого потомка EditText.Для этого я переопределил onWindowFocusChanged из Activity.
Хитрость была в том, чтобы скрыть клавиатуру, когда она больше не нужна.
Как видите, я использовал toggleSoftInput с SHOW_IMPLICIT вместо любой константы HIDE.В этом случае IMEManager сохранит клавиатуру видимой, только если этого требует сфокусированный вид, в противном случае она будет скрыта.
private boolean softInputActive;
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
InputMethodManager IMEManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
View focusedView = getCurrentFocus();
// Find the primitive focused view (not ViewGroup)
while (focusedView instanceof ViewGroup) {
focusedView = ((ViewGroup) focusedView).getFocusedChild();
}
if (hasFocus) {
if (focusedView instanceof EditText && focusedView.isEnabled()
&& !IMEManager.isActive(focusedView)) {
IMEManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
softInputActive = true;
}
} else if (softInputActive) {
if (focusedView != null && IMEManager.isActive()) {
IMEManager.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
}
softInputActive = false;
}
}