弹出窗口对话框显示时如何禁用后退按钮?

时间:2018-06-01 05:42:33

标签: android

我有一个弹出窗口,里面有EditText输入。创建弹出窗口如下所示:

Boolean focusable = true; popupWindow = new PopupWindow(popupView, width, height, focusable);

这一切都运作良好,EditText可以输入。当用户点击Android手机上的后退按钮时出现问题。后退按钮取消弹出窗口。这不应该发生,因为意图是用户无法继续进行与弹出窗口的交互。

现在,我们当然可以将弹出视图的可聚焦性设置为false,以禁止通过后退按钮解除:

Boolean focusable = false; popupWindow = new PopupWindow(popupView, width, height, focusable);

现在的问题是EditText没有得到能够输入的焦点。因此,用户无法与EditText

进行互动

知道如何通过弹出视图或EditText解决此问题?

编辑:

所以我尝试使用记录器覆盖主活动上的onBackPress方法,以检查是否在活动中调用了监听器:

  @Override
    public void onBackPressed() {
        super.onBackPressed();
        Logger.d("isthistriggered");
        finish();
    }

事实证明,当弹出窗口处于活动状态时,不会调用onBackPressed。第二次按下后退按钮后,它会触发听众。

3 个答案:

答案 0 :(得分:2)

MainActivity 中放置静态方法removePopupWindow(view v),  并在onBackPressed()

MainActivity.removePopupWindow(popWindow);内拨打电话

答案 1 :(得分:1)

如果正在显示PopupWindow,则onBackPressed不会立即传递给Activity,因此任何覆盖它并执行操作的努力都将是徒劳的。实现它的一种方法是创建CustomView和覆盖dispatchKeyEventPreIme()。您可以按照SO来描述这种方法。

答案 2 :(得分:-1)

当对话框显示时,您必须按下后退按钮

只需覆盖活动中的 onBackPressed()

全局声明弹出窗口对象

 @Override
public void onBackPressed() {
    if (popupWindow != null && popupWindow.isShowing()) {
        popupWindow.dismiss();
    } else {
        super.onBackPressed();
    }
}