我正在尝试使用Android内置的Search Dialog,除非我尝试将其与ProgressDialog一起使用,否则它的工作正常。他的基本事件链是:
这一切都很好,除非我提交查询后屏幕看起来像这样:
......这很难看。我怎样才能防止这种情况发生?
You can find the source code for the project at Google Code.
答案 0 :(得分:1)
我遇到了同样的问题并通过使用处理程序延迟进度对话框显示来“解决”它
在您的活动中,创建仅显示先前创建的进度对话框的处理程序:
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;
}
}
}
答案 1 :(得分:1)
我在执行或取消搜索后隐藏键盘时遇到了类似的问题。问题是您无法获得对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。
答案 2 :(得分:1)
我知道它已经晚了但它可能仍然有用。如果您使用无法访问其SearchManager的SearchDialog(例如Android 2),您可以使用以下内容关闭软键盘:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, 0);
或者如果您可以访问编辑文本(例如Android 4中的SearchView或任何EditText):
imm.hideSoftInputFromWindow(YOUR_EDIT_TEXT.getWindowToken(), 0);
答案 3 :(得分:0)
你试过下面的代码可能有帮助吗
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);