我正在开发一个应用程序,当按下按钮时,它会打开一个带有OK和Cancel按钮的对话框。
工作正常。
当用户按下后退按钮时,我按照以下方式处理
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ((keyCode == KeyEvent.KEYCODE_BACK))
{
}
return super.onKeyDown(keyCode, event);
}
但是没有调用上面的方法。我怎么处理这个?
答案 0 :(得分:221)
dialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface arg0, int keyCode,
KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
dialog.dismiss();
}
return true;
}
});
答案 1 :(得分:111)
您希望在创建对话框时设置OnCancelListener。它看起来像这样:
dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
//do whatever you want the back key to do
}
});
答案 2 :(得分:19)
您需要覆盖OnCancel
方法。此方法调用Back Key按下。这里的代码对我来说很完美。
AlertDialog alertDialog;
alertDialog.setOnCancelListener(new OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
// TODO Auto-generated method stub
dialog.dismiss();
}
});
希望这会对你有所帮助,如果对你有帮助就接受它。
谢谢..
答案 3 :(得分:6)
试试这个
new AlertDialog.Builder(this).setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
Logger.d(TAG, "--------- Do Something -----------");
return true;
}
return false;
}
})
答案 4 :(得分:1)
这是因为当您的Dialog打开时,您的窗口会将其焦点导向Dialog。
所以现在你必须在对话框上处理key
。
答案 5 :(得分:1)
如果您使用DialogFragment,我可以告诉the right way to do it is to override onCancel()
我注意到setOnCancelListener
不起作用,setOnKeyListener
有效,但对我来说有一个有趣的副作用,如果对话框有编辑文本,它会吞下所有键。
答案 6 :(得分:0)
此代码有效:
Dialog dlg = new Dialog(thisAct, R.style.DialogTheme);
dlg.setContentView(view);
dlg.setCancelable(false);
dlg.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
dlg.setOnKeyListener((arg0, keyCode, event) -> {
Timber.d("onKey(%d)", keyCode);
//{home intercepting
if ((keyCode == KeyEvent.KEYCODE_HOME)) {
Timber.i("HOME pressed");
return true;
}
return true;
});
dlg.show();
答案 7 :(得分:0)
在您自己的对话框中覆盖方法onBackPressed()
,并在您的代码中使用它:
public class MyDialog extends Dialog {
public MyDialog(@NonNull Context context) {
super(context);
}
@Override
public void onBackPressed() {
// Do what you want
}
}
使用:
MyDialog dlg = new MyDialog(context);
dlg.show();