Android WebView界面输入法弹起遮挡文本框问题最终解决方案---网上的其他的全是渣渣

3,214 阅读2分钟

为什么说网上的其他的全是渣渣?

因为踩过坑,网上大多数解决方案并不能适配所有手机,一堆博客全都是什么动态计算顶部状态栏,动态计算顶部导航栏。乱七八糟的在全局布局监听器里一算。设计过于复杂,且不能适配所有安卓机型,还需要改各种配置等。我试的可笑的是Android webView输入框软键盘遮挡问题-终极解决方案(不好使你打我),用了,然后产生新的问题,底部被原生导航栏遮挡,尝试修改,未果。PS---我真想去打他

自我解决方案

  • 先说优点,逻辑简单一看就会。 上代码:
/**
 * 输入法问题的最终处理方案。将这个方法直接在activity的onCreate方法中调用即可。
 */
private void softInputProc(){
    //这个监听是com.blankj:utilcode 库里的,一个安卓经常用到的工具类类库,大家可以
    自行github搜索下,也可以替换成自己的输入法改变时检测高度的代码
    KeyboardUtils.registerSoftInputChangedListener(this,height -> {
        Log.d("---> 输入法height",""+height);
        if(height>0){
            if(originalHeight==0){
                originalHeight=webParent.getMeasuredHeight();
            }
            //ToastUtils.show("输入法弹出处理");
            ViewGroup.LayoutParams params = webParent.getLayoutParams();
            params.height = originalHeight-height;
            webParent.setLayoutParams(params);
        }else{
            if(originalHeight!=0){
                ToastUtils.show("输入法关闭处理");
                ViewGroup.LayoutParams params = webParent.getLayoutParams();
                params.height = originalHeight;
                webParent.setLayoutParams(params);
            }
        }
    });
}

解释说明

  • 先说监听器

监听是com.blankj:utilcode 库里的,一个安卓经常用到的工具类类库,大家可以 自行github搜索下,也可以替换成自己的输入法改变时检测高度的代码

  • originalHeight

自行在activity中定义一下即可。int类型,初不初始化都行默认0.

  • webParent

当前Activity的最外层布局容器。

包教包会

如果您执行了上面代码还不能完美解决输入法问题,或者哪里不清楚,不明白。请QQ我(634534398 如此风景)。包教包会。也欢迎您在底部评论您在集成此代码时遇到的问题。