Android TextField:以编程方式设置焦点+软input
在我看来,我有一个searchEditText,我想以编程方式触发该字段上的单击事件的行为,即如果有必要(如果没有硬键盘可用)焦点的文本字段和显示软键盘。
我试过field.requestFocus()
。 该字段实际上获得焦点,但不显示软键盘。
我试过field.performClick()
。 但是,只调用该字段的OnClickListener。
任何想法 ?
好的先生,试试这个:
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); } });
而已! 请享用 ;)
下面的代码 为我工作 ,在另外两个答案 没有为我工作 :
@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); } }
input成功后,我也确定我隐藏了键盘
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()
。
编辑2:在对话框( DialogFragment
),使用以下
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
代替
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
field.post(new Runnable() { @Override public void run() { field.requestFocus(); field.onKeyUp(KeyEvent.KEYCODE_DPAD_CENTER, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DPAD_CENTER)); } });