我有一个弹出窗口,里面有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
。第二次按下后退按钮后,它会触发听众。
答案 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();
}
}