Мягкая клавиатура появляется только при фокусировке EditText ТОЛЬКО один раз
Спасибо за чтение.
У меня возникла странная проблема: поведение моего приложения таково, что при запуске Activity
я requestFocus()
на EditText
и показывается мягкая клавиатура.
Однако, когда я нажимаю кнопку "Назад", чтобы отклонить клавиатуру и коснуться EditText
, я больше не слышу, как клавиатура появляется. Единственный выход - снова запустить Activity
.
Вот как выглядит мой код:
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);
}
И вот мой 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>
Любая помощь будет принята с благодарностью!
Спасибо!
Ответы
Ответ 1
Попробуйте открыть и скрыть внутри Runnable
как,
ОТКРЫТЬ
ettext.requestFocus();
ettext.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager keyboard = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(ettext, 0);
}
},200);
ЗАКРЫТЬ
ettext.requestFocus();
ettext.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager keyboard = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.hideSoftInputFromWindow(ettext.
getWindowToken(), 0);
}
},200);
Ответ 2
Вы использовали неправильный вид для отображения окна ввода.
EditText editText = (EditText) findViewById(R.id.editText);
editText.requestFocus();
InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null) {
imm.showSoftInput(editText, 0);
}
Ответ 3
попробуйте следующее:
final InputMethodManager imm = (InputMethodManager)EnterWordsActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null)
{
imm.toggleSoftInput(YOUE_EDTITE_TEXT.SHOW_FORCED,1);
}
Ответ 4
Ничто из вышеперечисленного не работает, пока я не textField.clearFocus();
силы textField.clearFocus();
прежде чем запрашивать фокус, поэтому мой окончательный код в onResume
выглядит следующим образом.
@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);
}
Ответ 5
Используется эта кодировка в вашей деятельности, она скроет вашу клавиатуру this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);