在 android 工作室中按键盘上的 Enter 键提交包含 EditText 的 AlertDialog.Builder
Submit an AlertDialog.Builder containing an EditText by pressing enter on the keyboard in android studio
这是我的 AlertDialog.Builder 代码,它具有带 EditText 的自定义视图。在 EditText 中输入值后,我希望按键盘上的 Enter 键与 AlertDialog.Builder 的 PositiveButton 一样。我在 XML 文件中包含了必要的 'imeOptions' 部分。我设法在按 Enter 时执行代码,但 AlertDialog.Builder 仍在屏幕上并且不会像单击 AlertDialog.Builder 上的 PositiveButton 时那样消失。
//AlertDialog to set weekly income
incomeAlert = new AlertDialog.Builder(this);
incomeInflater = this.getLayoutInflater();
incomeDialogView = incomeInflater.inflate(R.layout.activity_weekincome, null);
incomeAlert.setView(incomeDialogView);
et_WeekIncome = incomeDialogView.findViewById(R.id.ls_WeekIncome);
et_WeekIncome.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitIncome();
return true;
}
return false;
}
});
incomeAlert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
submitIncome();
}
});
在此先感谢您的帮助。
更新:我通过添加另一段代码成功地关闭了 AlertDialog.Builder,如下所示
AlertDialog incomeDialog = incomeAlert.create();
incomeDialog.show();
然后需要解雇的时候,我用
incomeDialog.dismiss();
由于 AlertDialog.Builder 不提供 dismiss(),我不得不通过 AlertDialog 创建生成器。然后我在 AlertDialog 上调用 dismiss()。
谢谢大家的意见。
您可以将 OnKeyListener 与您的编辑文本结合使用来处理特定的按键操作。
mEditTV.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
// do action
return true;
}
return false;
}
});
可以这样使用上面的setOnKeyListener
et_WeekIncome.setOnKeyListener(new OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_ENTER:
submitIncome();
return true;
default:
break;
}
}return false;
}
});
Since dismiss() is not available with AlertDialog.Builder, I had to create the Builder through an AlertDialog. Then I call dismiss() on the AlertDialog.
还有一种方法可以解决这个问题:使用setOnShowListener回调来设置按键监听。这使您可以访问对话框的 dismiss() 方法。
incomeAlert.setOnShowListener((DialogInterface d) -> {
et_WeekIncome.setOnKeyListener((v, keyCode, event) -> {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) {
onClick(dialog, BUTTON_POSITIVE);
d.dismiss();
return true;
}
return false;
});
这是我的 AlertDialog.Builder 代码,它具有带 EditText 的自定义视图。在 EditText 中输入值后,我希望按键盘上的 Enter 键与 AlertDialog.Builder 的 PositiveButton 一样。我在 XML 文件中包含了必要的 'imeOptions' 部分。我设法在按 Enter 时执行代码,但 AlertDialog.Builder 仍在屏幕上并且不会像单击 AlertDialog.Builder 上的 PositiveButton 时那样消失。
//AlertDialog to set weekly income
incomeAlert = new AlertDialog.Builder(this);
incomeInflater = this.getLayoutInflater();
incomeDialogView = incomeInflater.inflate(R.layout.activity_weekincome, null);
incomeAlert.setView(incomeDialogView);
et_WeekIncome = incomeDialogView.findViewById(R.id.ls_WeekIncome);
et_WeekIncome.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
submitIncome();
return true;
}
return false;
}
});
incomeAlert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
submitIncome();
}
});
在此先感谢您的帮助。
更新:我通过添加另一段代码成功地关闭了 AlertDialog.Builder,如下所示
AlertDialog incomeDialog = incomeAlert.create();
incomeDialog.show();
然后需要解雇的时候,我用
incomeDialog.dismiss();
由于 AlertDialog.Builder 不提供 dismiss(),我不得不通过 AlertDialog 创建生成器。然后我在 AlertDialog 上调用 dismiss()。
谢谢大家的意见。
您可以将 OnKeyListener 与您的编辑文本结合使用来处理特定的按键操作。
mEditTV.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
// do action
return true;
}
return false;
}
});
可以这样使用上面的setOnKeyListener
et_WeekIncome.setOnKeyListener(new OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_ENTER:
submitIncome();
return true;
default:
break;
}
}return false;
}
});
Since dismiss() is not available with AlertDialog.Builder, I had to create the Builder through an AlertDialog. Then I call dismiss() on the AlertDialog.
还有一种方法可以解决这个问题:使用setOnShowListener回调来设置按键监听。这使您可以访问对话框的 dismiss() 方法。
incomeAlert.setOnShowListener((DialogInterface d) -> {
et_WeekIncome.setOnKeyListener((v, keyCode, event) -> {
if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_ENTER) {
onClick(dialog, BUTTON_POSITIVE);
d.dismiss();
return true;
}
return false;
});