当我点击EditTextView时,有时会显示键盘,有时则不会。
在Android 2.1中,当我点击EditTextView时,它会显示键盘。
但是当我在Android 2.2上启动相同的应用程序时,它不会显示键盘。
请帮助我解决这个问题。
当我点击EditTextView时,有时会显示键盘,有时则不会。
在Android 2.1中,当我点击EditTextView时,它会显示键盘。
但是当我在Android 2.2上启动相同的应用程序时,它不会显示键盘。
请帮助我解决这个问题。
好的,可能有点晚了,但这个方法确实有效。
我在Android 2.1和2.3.x上遇到了这个问题(未在其他版本的SDK上测试)。
我注意到一个奇怪的事情,当我点击EditText无法打开键盘时,我按下返回按钮显示一个警报对话框,然后取消(关闭)它,再次点击EditText,现在键盘又重新出现了。
由此我可以得出结论:如果EditText没有先前获取焦点(在EditText视图上显示警报对话框会使EditText失去焦点),则键盘将始终显示在EditText上。
因此,当您的EditText被带到前台时,请调用下面的函数:
mEditText.clearFocus();
或者parentViewThatContainsEditTextView.clearFocus();
我在Galaxy S3上遇到了类似的问题(在PopupWindow中显示EditText控件时,键盘从未出现)。这是解决我的问题的方法:
final PopupWindow popUp = new PopupWindow(vbl.getMainLayout());
[....]
popUp.setFocusable(true);
popUp.update();
我不想使用 editText.clearFocus()
使 EditText 失去焦点。找到了这个解决方案。
@Override
public void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT < 11) {
editText.clearFocus();
editText.requestFocus();
}
}
这里提供一种可能的解决方案:
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(final View v, final boolean hasFocus) {
if (hasFocus && editText.isEnabled() && editText.isFocusable()) {
editText.post(new Runnable() {
@Override
public void run() {
final InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText,InputMethodManager.SHOW_IMPLICIT);
}
});
}
}
});
代码基于以下链接:
当EditText获得焦点时,此代码将自动显示软键盘。<EditText
android:id="@+id/editTextFix"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/fix"
android:importantForAutofill="no"
tools:targetApi="o"
android:inputType="text"
android:visibility="gone"/>
PopupWindow
中,我只需要调用popupWindow.setFocusable(true)
。textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
displayKeyboard();
}
});
private void displayKeyboard(){
if (textView != null) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInputFromWindow(textView.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);
}
}
InputMethodManager inputmethodmgr= (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputmethodmgr.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);