![](/img/trans.png)
[英]Android soft keyboard stays open after confirming EditTextPreference dialog
[英]Android Search Dialog soft keyboard stays open for too long
我正在尝试使用Android的内置“ 搜索对话框” ,除非我尝试将其与ProgressDialog一起使用,否则它的运行情况都很好。 它的基本事件链是:
一切正常,除非我提交查询后,屏幕如下所示:
...这很丑。 我怎样才能防止这种情况发生?
在执行或取消搜索后隐藏键盘也遇到类似的问题。 问题是您无法获得对SearchManager的“搜索对话框”的引用,也无法获得编辑文本的引用(因此,通常的hideSoftInputFromWindow方法将不起作用。)如果在安装过程中运行以下代码,则应注意以下事项:问题:
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchManager.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, 0);
}
});
值得注意的是,在所有版本的Android上切换键盘可能都不是正确的选择。 我仅在os版本为Gingerbread或更早版本时运行此代码。 否则,我将使用SearchView。
我知道已经晚了,但可能仍然有用。 如果您使用无法访问其SearchManager(例如Android 2)的SearchDialog,则可以使用以下方法关闭软键盘:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, 0);
或是否可以访问编辑文本(例如,Android 4中的SearchView或任何EditText):
imm.hideSoftInputFromWindow(YOUR_EDIT_TEXT.getWindowToken(), 0);
我遇到了相同的问题,并通过使用Handler延迟了进度对话框的显示来“解决”了它
在您的活动中,创建仅显示先前创建的进度对话框的处理程序:
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (null != mProgress) {
mProgress.show();
}
}
};
然后使用以下方法显示或隐藏它:
private void showWaitPopup(final boolean doShow) {
if (doShow) {
if (null == mProgress) {
mProgress = new ProgressDialog(this);
mProgress.setMessage(getString(R.string.searching));
mProgress.setCancelable(false);
// launch timer here
mHandler.sendEmptyMessageDelayed(0, 100);
}
} else {
if (null != mProgress) {
mProgress.dismiss();
mProgress = null;
}
}
}
您是否尝试过以下代码可能会有所帮助
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.