Android AlertDialog,don';按下按键时不要关机,但要触摸
本文关键字:AlertDialog 关机 触摸 Android don | 更新日期: 2023-09-27 18:21:49
我找到了在触摸对话框按钮或按下键盘键时取消AlertDialog的解决方案。但是,我只想在按下键时取消解雇,触摸按钮应该仍然有效。
例如,如果按键被按下,如何保持AlertDialog打开,但保持按钮触摸功能?
由于我使用的是Xamarin,到目前为止,这里是我的C#代码,但真正的Java解决方案也被接受,因为它们很容易翻译:
构建对话框:
AlertDialog dialog = new AlertDialog.Builder(this)
.SetTitle("blabla")
.SetMessage("more bla")
.SetPositiveButton("OK", (sender2, e2) => {
// Do something
SetResult(Result.Ok, oIntent);
Finish(); })
.SetNegativeButton("Cancel", (sender2, e2) => { })
.Create();
dialog.SetOnShowListener(new AlertDialogShowListener(dialog));
dialog.Show();
以及接口的实现:
private class AlertDialogShowListener : Java.Lang.Object, IDialogInterfaceOnShowListener {
private AlertDialog _dialog;
internal AlertDialogShowListener(AlertDialog dialog) {
_dialog = dialog;
}
public void OnShow(IDialogInterface dialog) {
Button b = dialog.GetButton((int)DialogButtonType.Positive);
b.SetOnClickListener(new ButtonOnClickListener());
b = dialog.GetButton((int)DialogButtonType.Negative);
b.SetOnClickListener(new ButtonOnClickListener());
}
}
private class ButtonOnClickListener : Java.Lang.Object, View.IOnClickListener {
public void OnClick(View v) {
// How to NOT dismiss if a _key_ has been pressed?
}
}
(附言:我知道在Xamarin中有一种更简单的方法可以通过附加Click事件来编写这样的代码,但我认为Java专业人员更容易通过OnShow和OnClick监听器来遵循它。)
我找到了答案!
显示警报对话框后,获取按钮并覆盖它们的onKeyPress方法,这样这些按钮就不会在警报对话框上调用disse。
在C#中,它看起来像这样:
AlertDialog dialog = new AlertDialog.Builder(this)
.SetTitle("blabla")
.SetMessage("blablabla")
.SetPositiveButton("OK", (sender, e) => {
SetResult(Result.Ok, oIntent);
Finish();
})
.SetNegativeButton("Cancel", (sender, e) => { })
.Show(); // Important, or GetButton() will return null
// Now disable the default dismissing actions on key presses.
dialog.GetButton((int)DialogButtonType.Positive).KeyPress += (sender, e) => { };
dialog.GetButton((int)DialogButtonType.Negative).KeyPress += (sender, e) => { };