Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当弹出窗口对话框显示时,如何禁用后退按钮?_Android - Fatal编程技术网

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
)来实现它,因为它需要输入。你认为如果我只是将其作为布局的一部分,然后隐藏、取消隐藏它会更容易吗?