popupWindow获取焦点触发键盘但是我点击外部弹窗会取消
时间: 2024-04-12 13:26:47 浏览: 74
您好!对于这个问题,您可以尝试在弹窗外部设置一个点击事件,当用户点击外部区域时取消弹窗。以下是一种实现方式:
```java
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// 设置弹窗外部的点击事件
popupWindow.setTouchInterceptor(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
popupWindow.dismiss();
return true;
}
return false;
}
});
// 弹窗内部的控件获取焦点
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
// 设置外部控件获取焦点
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}
});
// 弹窗内部的控件获取焦点
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
// 设置外部控件获取焦点
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
}
});
// 显示弹窗
popupWindow.showAtLocation(anchorView, Gravity.CENTER, 0, 0);
```
这样设置之后,当用户点击弹窗外部区域时,弹窗会被取消,并且焦点会回到外部的控件上。希望能帮到您!如果有任何问题,请随时追问。
阅读全文