Android TextField:以编程方式设置焦点+软输入
在我看来,我有一个搜索EditText,我希望以编程方式触发该字段上的单击事件的行为,即将焦点对准文本字段并在必要时显示软键盘(如果没有可用的硬键盘)。
我试过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);
}
}
输入成功后,我也确定我隐藏了键盘
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);
链接地址: http://www.djcxy.com/p/24219.html
上一篇: Android TextField : set focus + soft input programmatically
下一篇: When the soft keyboard appears, it makes my EditText field lose focus