本代码来源于autoxjs群友@つ゛ Shrek・流云 ଲ͏ ,经过测试,代码正常。
描述
通过监听全局布局的变化来实现输入法的弹起和收起的监测,并根据不同的状态进行相应的处理。
内容
具体代码如下:
let rootView = activity.getWindow().getDecorView().getRootView();
rootView.getViewTreeObserver().addOnGlobalLayoutListener(
new android.view.ViewTreeObserver.OnGlobalLayoutListener({
onGlobalLayout: function () {
let r = new android.graphics.Rect();
rootView.getWindowVisibleDisplayFrame(r);
let screenHeight = rootView.getRootView().getHeight();
let keypadHeight = screenHeight - r.bottom;
// 输入法弹起
if (keypadHeight > screenHeight * 0.15) {
toast('输入法弹起');
// 执行相应操作
}
// 输入法收起
else {
toast('输入法收起');
// 执行相应操作
}
}
})
);
原理
首先,通过activity.getWindow().getDecorView().getRootView()
获取到当前Activity的根视图。
然后,通过rootView.getViewTreeObserver().addOnGlobalLayoutListener()
方法添加一个全局布局监听器,在布局发生变化时触发回调函数onGlobalLayout()
。
在onGlobalLayout()
回调函数中,通过rootView.getWindowVisibleDisplayFrame(r)
来获取当前可见区域的矩形信息,其中r.bottom
表示输入法所覆盖的底部位置。
然后,通过比较屏幕高度和输入法覆盖底部位置之间的差值,即可判断输入法的状态。如果差值超过了屏幕高度的15%,则认为输入法弹起;否则,认为输入法收起。
最后,根据输入法的状态执行相应的操作,例如弹出提示信息或执行其他逻辑。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
- 最新
- 最热
只看作者