PopupWindow 遮住软键盘怎么解决
时间: 2023-07-01 17:10:45 浏览: 107
当PopupWindow弹出时,可以通过设置PopupWindow的softInputMode属性来控制软键盘的显示和隐藏。一般情况下,我们可以将PopupWindow的softInputMode属性设置为PopupWindow.INPUT_METHOD_NEEDED,表示PopupWindow需要软键盘,但是PopupWindow并不会自动调整大小以避免遮盖软键盘。
因此,为了解决PopupWindow遮住软键盘的问题,我们可以在PopupWindow弹出时,手动调整PopupWindow的大小,使其避开软键盘。具体实现方法如下:
1. 获取当前软键盘的高度:
```java
public int getSoftInputHeight(Activity activity) {
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
int screenHeight = activity.getWindow().getDecorView().getRootView().getHeight();
int softInputHeight = screenHeight - rect.bottom;
if (softInputHeight > 0 && softInputHeight < screenHeight / 3) {
return softInputHeight;
}
return 0;
}
```
2. 在PopupWindow弹出时,获取软键盘高度并调整PopupWindow的大小:
```java
mPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
// 监听PopupWindow的布局变化
mPopupWindow.getContentView().getViewTreeObserver()
.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int softInputHeight = getSoftInputHeight(activity);
if (softInputHeight > 0) {
// 获取PopupWindow的布局参数
ViewGroup.LayoutParams layoutParams = mPopupWindow.getContentView().getLayoutParams();
layoutParams.height = screenHeight - softInputHeight;
mPopupWindow.getContentView().setLayoutParams(layoutParams);
}
}
});
```
这样,当软键盘弹出时,PopupWindow就会自动调整大小以避开软键盘。
阅读全文