Android 系统中软键盘收起时,不会引起窗口的高度发生变化,监听不到 window 的 onresize 事件
时间: 2024-05-05 07:22:22 浏览: 141
在 Android 系统中,软键盘的弹出和隐藏并不会引起窗口的高度发生变化,因此也不会触发 window 的 onresize 事件。不过,Android 系统提供了一种专门用于监听软键盘状态变化的方法,可以通过 Activity 的 onGlobalLayout 方法来实现。
具体来说,可以在 Activity 中重写 onGlobalLayout 方法,并通过 ViewTreeObserver 监听 View 的布局变化事件。在 onGlobalLayout 方法中,可以通过比较 View 的高度和屏幕高度的差值来判断软键盘的状态,从而实现软键盘状态的监听。
示例代码如下:
```java
private boolean isKeyboardShown = false; // 软键盘是否弹出
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View rootView = findViewById(R.id.root_view);
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = rootView.getRootView().getHeight() - rootView.getHeight();
if (heightDiff > 100 && !isKeyboardShown) { // 高度差值大于 100,说明软键盘弹出
isKeyboardShown = true;
// TODO: 处理软键盘弹出事件
} else if (heightDiff < 100 && isKeyboardShown) { // 高度差值小于 100,说明软键盘隐藏
isKeyboardShown = false;
// TODO: 处理软键盘隐藏事件
}
}
});
}
```
在这个示例代码中,我们首先获取了整个窗口的根视图 rootView,并通过 rootView 的 getViewTreeObserver 方法来添加一个布局变化监听器。在 onGlobalLayout 方法中,我们通过 rootView 的 getRootView 和 getHeight 方法来获取屏幕高度和 rootView 的高度,从而计算出软键盘的高度差值 heightDiff。如果 heightDiff 大于 100,说明软键盘弹出,此时我们可以处理软键盘弹出事件;如果 heightDiff 小于 100,说明软键盘隐藏,此时我们可以处理软键盘隐藏事件。
阅读全文
相关推荐

















