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)); } });