在启动 ProgressDialog 之前隐藏键盘
Hiding keyboard prior to initiating ProgressDialog
我有一个键盘,在启动我的下一个功能之前我绝对需要它消失。我确定的是 ProgressDialog 妨碍了。我拔掉了线,它工作正常。为什么 ProgressDialog 不能显示 当且仅当 键盘已经收起?好像有自己的想法。
public void hideKeyboard(){
View view = this.getActivity().getCurrentFocus();
if (view != null){
InputMethodManager imm = (InputMethodManager)((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
ShowProgressDialog(getResources().getString(R.string.saving_design));
new SaveTemplateTask().execute();
}
更新: 好像是这个逻辑,但是还是不行。 ProgressDialog 根本不等待 hideKeyboard 被验证为真与否。
我将 hideKeyboard return 设置为布尔值。
public boolean hideKeyboard() {
View view = this.getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager) ((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
return true;
}
然后在一个单独的函数中:
if (hideKeyboard()) {
ShowProgressDialog(getResources().getString(R.string.saving_design));
new SaveTemplateTask().execute();
}
public static void hideKeyboard(Context ctx) {
InputMethodManager inputManager = (InputMethodManager) ctx
.getSystemService(Context.INPUT_METHOD_SERVICE);
// check if no view has focus:
View v = ((Activity) ctx).getCurrentFocus();
if (v == null)
return;
inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
根据您的要求隐藏密钥board.Use下面的代码非常简单
getActivity().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
我放弃并改用 Toasts(一个在我的 onCreate 中,一个在我的新 SaveTemplateTask 的 onPostExecute 方法中...因为 ProgressDialog 倾向于在 before 键盘是隐藏(这不是我们想要的)。老实说,这看起来更好,所以我可以接受,但很想知道为什么我上面最初的问题中描述的过程似乎没有 运行 这么顺利。
hideKeyboard();
if (hideKeyboard()) {
ShowProgressDialog(getResources().getString(R.string.saving_design));
Toast.makeText(getActivity().getApplicationContext(), "Saving design", Toast.LENGTH_LONG).show();
new SaveTemplateTask().execute();
}
第二个函数:
public boolean hideKeyboard() {
View view = this.getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager) ((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
return true;
}
return false;
}
我有一个键盘,在启动我的下一个功能之前我绝对需要它消失。我确定的是 ProgressDialog 妨碍了。我拔掉了线,它工作正常。为什么 ProgressDialog 不能显示 当且仅当 键盘已经收起?好像有自己的想法。
public void hideKeyboard(){
View view = this.getActivity().getCurrentFocus();
if (view != null){
InputMethodManager imm = (InputMethodManager)((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
ShowProgressDialog(getResources().getString(R.string.saving_design));
new SaveTemplateTask().execute();
}
更新: 好像是这个逻辑,但是还是不行。 ProgressDialog 根本不等待 hideKeyboard 被验证为真与否。
我将 hideKeyboard return 设置为布尔值。
public boolean hideKeyboard() {
View view = this.getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager) ((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
return true;
}
然后在一个单独的函数中:
if (hideKeyboard()) {
ShowProgressDialog(getResources().getString(R.string.saving_design));
new SaveTemplateTask().execute();
}
public static void hideKeyboard(Context ctx) {
InputMethodManager inputManager = (InputMethodManager) ctx
.getSystemService(Context.INPUT_METHOD_SERVICE);
// check if no view has focus:
View v = ((Activity) ctx).getCurrentFocus();
if (v == null)
return;
inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
根据您的要求隐藏密钥board.Use下面的代码非常简单
getActivity().getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
我放弃并改用 Toasts(一个在我的 onCreate 中,一个在我的新 SaveTemplateTask 的 onPostExecute 方法中...因为 ProgressDialog 倾向于在 before 键盘是隐藏(这不是我们想要的)。老实说,这看起来更好,所以我可以接受,但很想知道为什么我上面最初的问题中描述的过程似乎没有 运行 这么顺利。
hideKeyboard();
if (hideKeyboard()) {
ShowProgressDialog(getResources().getString(R.string.saving_design));
Toast.makeText(getActivity().getApplicationContext(), "Saving design", Toast.LENGTH_LONG).show();
new SaveTemplateTask().execute();
}
第二个函数:
public boolean hideKeyboard() {
View view = this.getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager) ((this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)));
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
return true;
}
return false;
}