Android WebView吊起软键盘遮挡输入框的问题解决

直接复制代码:

Kotlin:
Kotlin 复制代码
        mWebView?.getViewTreeObserver()?.addOnGlobalLayoutListener {
                val r = Rect()
                mWebView?.getWindowVisibleDisplayFrame(r)
                val screenHeight = mWebView?.getRootView()?.height ?: 0
                val keypadHeight = screenHeight - r.bottom
                val layoutParams = mWebView?.layoutParams
                if (keypadHeight > screenHeight * 0.15) { // 如果键盘高度超过屏幕高度的15%则认为键盘显示
                    layoutParams?.height = screenHeight - keypadHeight; // 调整WebView高度
                    mWebView?.layoutParams = layoutParams
                } else if (layoutParams?.height != FrameLayout.LayoutParams.MATCH_PARENT) { // 如果键盘隐藏,恢复原始高度或MATCH_PARENT
                    layoutParams?.height = FrameLayout.LayoutParams.MATCH_PARENT; // 或者设置为某个固定高度
                    mWebView?.layoutParams = layoutParams
                }
            }
Java:
java 复制代码
yourWebView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        Rect r = new Rect();
        yourWebView.getWindowVisibleDisplayFrame(r);
        int screenHeight = yourWebView.getRootView().getHeight();
        int keypadHeight = screenHeight - r.bottom;
        FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams)yourWebView.getLayoutParams(); 
        if (keypadHeight > screenHeight * 0.15) { // 如果键盘高度超过屏幕高度的15%则认为键盘显示
            layoutParams.height = screenHeight - keypadHeight; // 调整WebView高度
            yourWebView.setLayoutParams(layoutParams);
        } else if (layoutParams.height != FrameLayout.LayoutParams.MATCH_PARENT) { // 如果键盘隐藏,恢复原始高度或MATCH_PARENT
            layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT; // 或者设置为某个固定高度
            yourWebView.setLayoutParams(layoutParams);
        }
    }
});

更多算法内容推荐:

Android 相关文章https://blog.csdn.net/qq_39731011/category_7565212.html


复制代码
如果您感觉文章有用的话,麻烦点个赞吧!
如果您发现文章有任何错误或建议,请评论区留言或者私信!
深海谢过各位的支持,一起加油!
相关推荐
_祝你今天愉快5 小时前
从驱动来分析服务的添加过程
android
Dovis(誓平步青云)7 小时前
折叠屏悬停看视频,上半屏和下半屏应该各做什么
android·java·服务器·开发语言·安全·音视频
alexhilton8 小时前
让架构边界变成可执行的测试
android·kotlin·android jetpack
hai_android10 小时前
SendChannel 与 ReceiveChannel 通信机制
android
数据治理自习室12 小时前
AI 应用评测体系(GraphRAG)
android·大数据·人工智能·kotlin
爱笑鱼12 小时前
Android 系统启动机制(五):system_server 是 init 启动的,还是 Zygote fork 出来的?
android
智购科技无人售货机工厂13 小时前
2026自动售货机防拆机物理安全设计:从安全螺丝到结构互锁的工程实践~YH
android·网络·驱动开发·python·单片机·安全·云原生
开开心心就好13 小时前
电子教鞭工具支持画框写字插图片功能齐全
android·开发语言·前端·javascript·人工智能·pdf·html
Dovis(誓平步青云)13 小时前
拍视频前先把镜头想清楚:做一个分镜取景辅助器
android·java·服务器·javascript·人工智能
峥嵘life14 小时前
Android16 系统 APEX 模块说明
android·大数据·开发语言