Android текстовое поле: установить фокус + мягкий ввод программно
на мой взгляд, у меня есть поиск EditText, и я хотел бы программно вызвать поведение события click на поле, т. е. сосредоточить внимание на текстовом поле и при необходимости отобразить мягкую клавиатуру (если нет жесткой клавиатуры).
пробовал field.requestFocus()
. Поле фактически получает фокус, но мягкая клавиатура не отображается.
пробовал field.performClick()
. Но это только вызывает OnClickListener поля.
есть идеи ?
4 ответа:
добрый сэр, попробуйте этот:
edittext.setFocusableInTouchMode(true); edittext.requestFocus();
Я не уверен, но это может потребоваться на некоторых телефонах (некоторые из старых устройств):
final InputMethodManager inputMethodManager = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.showSoftInput(edittext, InputMethodManager.SHOW_IMPLICIT);
вот код, который работал для меня.
edittext.post(new Runnable() { public void run() { edittext.requestFocusFromTouch(); InputMethodManager lManager = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); lManager.showSoftInput(edittext, 0); } });
вот именно! Наслаждайтесь ;)
The следующий кодработал для меня, после еще два ответау меня не получилось:
@Override public void onResume() { super.onResume(); SingletonBus.INSTANCE.getBus().register(this); //passwordInput.requestFocus(); <-- that doesn't work passwordInput.postDelayed(new ShowKeyboard(), 300); //250 sometimes doesn't run if returning from LockScreen }
здесь
ShowKeyboard
иprivate class ShowKeyboard implements Runnable { @Override public void run() { passwordInput.setFocusableInTouchMode(true); // passwordInput.requestFocusFromTouch(); passwordInput.requestFocus(); getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0); } }
после успешного ввода, я также убедитесь, что я скрыть клавиатуру
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); ((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(getView().getWindowToken(), 0);
технически, я только что добавил 300 мс задержки перед запуском запроса отображения мягкой клавиатуры. Странно, правда? Также изменился
requestFocus()
доrequestFocusFromTouch()
.изменить: Не используйте
requestFocusFromTouch()
это дает сенсорное событие для запуска. ПридерживайтесьrequestFocus()
.EDIT2: в диалогах (
DialogFragment
), используйте следующиеgetDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
вместо
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);