Android 当弹出窗口对话框显示时,如何禁用后退按钮?
我有一个弹出窗口,里面有一个Android 当弹出窗口对话框显示时,如何禁用后退按钮?,android,Android,我有一个弹出窗口,里面有一个EditText输入。弹出窗口的创建如下所示: Boolean focusable=true; popupWindow=新的popupWindow(popupView、宽度、高度、可聚焦); 这一切都很有效,EditText可以通过输入。当用户点击android手机上的后退按钮时,问题就出现了。后退按钮关闭弹出窗口。这不应该发生,因为用户的意图是在与弹出窗口进行交互之前无法继续 现在,我们当然可以将弹出视图的焦点设置为false,以禁止通过后退按钮解除: Boole
EditText
输入。弹出窗口的创建如下所示:
Boolean focusable=true;
popupWindow=新的popupWindow(popupView、宽度、高度、可聚焦);
这一切都很有效,EditText
可以通过输入。当用户点击android手机上的后退按钮时,问题就出现了。后退按钮关闭弹出窗口。这不应该发生,因为用户的意图是在与弹出窗口进行交互之前无法继续
现在,我们当然可以将弹出视图的焦点设置为false
,以禁止通过后退按钮解除:
Boolean focusable=false;
popupWindow=新的popupWindow(popupView、宽度、高度、可聚焦);
现在的问题是,EditText
没有收到它需要能够键入的焦点。因此,用户无法与EditText
您知道如何通过弹出视图或编辑文本解决此问题吗
编辑:
因此,我尝试使用记录器覆盖主活动上的onBackPress
方法,以检查是否在活动中调用了侦听器:
@Override
public void onBackPressed() {
super.onBackPressed();
Logger.d("isthistriggered");
finish();
}
事实证明,当弹出窗口处于活动状态时,不会调用
onBackPressed
。一旦您第二次按下后退按钮,它就会触发侦听器。您必须在显示对话框时处理后退按钮的按下
只需覆盖活动中的onBackPressed()
@Override
public void onBackPressed() {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
} else {
super.onBackPressed();
}
}
并全局声明弹出窗口对象
@Override
public void onBackPressed() {
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
} else {
super.onBackPressed();
}
}
将静态方法
removePopupWindow(视图v)
放置在main活动中,
并在
onBackPressed()
内部调用它,就像main活动一样代码>如果显示PopupWindow,则返回的将不会立即传递到活动
,因此任何覆盖它和执行操作的努力都是徒劳的。实现它的一种方法是创建CustomView并覆盖dispatchKeyEventPreIme()
。您可以按照此方法进行操作。当您在其作用域之外单击时,弹出窗口是否也会关闭?@Umair弹出窗口覆盖了整个视图,因此没有机会在作用域之外单击。请检查我的答案是否适合您。快速学习者的回答实际上会关闭弹出窗口。我使用的是PopupWindow元素。在这里,触发弹出窗口的活动应该放在哪里?是的,在活动中,您必须覆盖弹出窗口对象并全局声明弹出窗口对象。请检查此操作,并让我知道它是否有效,我正在等待测试。当单击backbutton并关闭弹出窗口时,它不会触发Backpressed上的on
。它是在弹出窗口关闭后触发的,您再次单击“上一步”按钮。我只是尝试了一下日志,看看它是否会触发onBackPressed
`@重写public void onBackPressed(){super.onBackPressed();Logger.d(“isthistriggered”);finish();}`这在测试中似乎是正确的。我会查出来的,谢谢。你知道一种方法可以使PopupWindow
的内部可聚焦,而外部不可聚焦吗?(即,EditText
问题)认为这是不可能的。但我不是100%确定。谢谢,看起来CustomView可能是当时的发展方向。或者可能我使用了错误的构造(PopupView
)来实现它,因为它需要输入。你认为如果我只是将其作为布局的一部分,然后隐藏、取消隐藏它会更容易吗?