我是Android的新手,正在制作警报对话框的演示,一旦单击警报中的一个按钮,我想关闭软键盘。我已经以编程方式尝试过,但键盘仍然打开,你能帮我解决这个问题吗?法典
public void Show_Dialog() {
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(
SwipeActivity.this);
LayoutInflater inflater = this.getLayoutInflater();
final View layout = inflater.inflate(R.layout.add_albom_dialog, null);
alertDialog.setView(layout);
final InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
//android:digits="abcdefghijklmnopqrstuvwxyz1234567890 "
alertDialog.setPositiveButton("Create",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
EditText txts = (EditText) layout
.findViewById(R.id.addAblum_edit);
hideSoftKeyboardDialogDismiss(SwipeActivity.this);
if(txts.getText().toString().trim().length() > 0) {
Add_album(txts.getText().toString());
} else {
AlertDialog alertDialog = new AlertDialog.Builder(SwipeActivity.this).create();
alertDialog.setTitle("Error");
alertDialog.setMessage("Name can't be emtpy");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
inputManager.hideSoftInputFromInputMethod(getCurrentFocus().getWindowToken(), 0);
}
});
alertDialog.show();
}
dialog.cancel(); // Your custom code
}
});
/* When negative (No/cancel) button is clicked */
alertDialog.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
hideSoftKeyboardDialogDismiss(SwipeActivity.this);
dialog.cancel();
// finish();
}
});
alertDialog.show();
}
试试这个:
protected void hideSoftKeyboard(EditText mSearchView) {
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(mSearchView.getWindowToken(), 0);
}
dialog.setOnDissmissListener(){
void onDismiss(){
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
inputManager.hideSoftInputFromInputMethod(getCurrentFocus().getWindowToken(), 0);
}
}
dialog.dismiss();
实际上必须有延迟,所以请使用此代码
public static void hideSoftKeyboardDialogDismiss(final Activity activity) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
InputMethodManager inputMethodManager = (InputMethodManager) activity
.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (null != activity.getCurrentFocus()) {
inputMethodManager.hideSoftInputFromWindow(activity
.getCurrentFocus().getWindowToken(), 0);
}
}
});
}
}, 1);
}
尝试按以下方式执行此操作
final InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
final AlertDialog alertDialog = new AlertDialog.Builder(SwipeActivity.this).create();
alertDialog.setTitle("Error");
alertDialog.setMessage("Name can't be emtpy");
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
inputManager.hideSoftInputFromInputMethod(alertDialog.getCurrentFocus().getWindowToken(), 0);
dialog.dismiss();
}
});
alertDialog.show();
使用alertDailog
的当前焦点而不是您的活动