博客
关于我
Android:WebView内输入框被键盘遮挡解决方案
阅读量:505 次
发布时间:2019-03-07

本文共 4411 字,大约阅读时间需要 14 分钟。

先贴代码

package com.miss.plugin;import android.app.Activity;import android.graphics.Rect;import android.os.Build;import android.util.Log;import android.view.View;import android.view.ViewTreeObserver;import android.widget.FrameLayout;public class KeyBoardWorkaround {       private  final String TAG = "KeyBoardWorkaround";    //  activity 的根视图    private  View rootView;    //  记录根视图的显示高度    private  int rootViewVisibleHeight;    private  boolean hasInit = false;    private  int initHeight;    private  int initWidth;    //  是否发生旋转    private  boolean hasRotate = false;    private  FrameLayout.LayoutParams frameLayoutParams;    private  int statusBarHeight;    /**     *     * @param activity     */    public  void solve(Activity activity) {           //  tpc : 获取activity的根视图        rootView = activity.getWindow().getDecorView();        //  tpc : 获取状态栏的高度,此部分做机型适配        int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");        statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId);        FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);        final View mChildOfContent = content.getChildAt(0);        frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();        //  tpc : 监听视图树中全局布局发生改变或视图树种某个视图可视状态发生改变        rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {               @Override            public void onGlobalLayout() {                   //  tpc : 获取当前根视图在屏幕上显示的大小                Rect rect = new Rect();                rootView.getWindowVisibleDisplayFrame(rect);                int visibleHeight = rect.height();                Log.e(TAG, "visibleHeight =  " + visibleHeight);                Log.e(TAG, "visibleWidth =  " + rect.width());                if (!hasInit) {                       initHeight = rect.height();                    initWidth = rect.width();                    hasInit = !hasInit;                }                if (rootViewVisibleHeight == 0) {                       rootViewVisibleHeight = visibleHeight;                    return;                }                //  根视图显卡显示高度没有变化,可以看做软键盘状态没有改变                if (rootViewVisibleHeight == visibleHeight) {                       return;                }                //  发生了旋转                if (visibleHeight == initWidth) {                       rootViewVisibleHeight = visibleHeight;                    frameLayoutParams.height = initWidth;                    frameLayoutParams.width = initHeight;                    mChildOfContent.requestLayout();                    hasRotate = true;                    return;                }                //  旋转恢复                if (hasRotate) {                       rootViewVisibleHeight = visibleHeight;                    frameLayoutParams.height = initHeight;                    frameLayoutParams.width = initWidth;                    hasRotate = false;                    return;                }                //  根视图高度变小超过200,软键盘显示                if (rootViewVisibleHeight - visibleHeight > 200) {                       //  TODO 键盘展示逻辑,机型适配                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {                           frameLayoutParams.height = visibleHeight + statusBarHeight;                    } else {                           frameLayoutParams.height = visibleHeight;                    }                    mChildOfContent.requestLayout();                    rootViewVisibleHeight = visibleHeight;                    return;                }                //  根视图高度变大超过200,软键盘隐藏                if (visibleHeight - rootViewVisibleHeight > 200) {                       //  TODO 键盘收起逻辑                    frameLayoutParams.height = initHeight;                    mChildOfContent.requestLayout();                    rootViewVisibleHeight = visibleHeight;                    return;                }            }        });    }}

调用

在有WebView的活动的onCreate()方法调用,也可以把这个抽成静态方法调用

@Overrideprotected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    KeyBoardWorkaround keyBoardWorkaround = new KeyBoardWorkaround();    keyBoardWorkaround.solve(this);}

横竖屏切换后键盘无法正常弹出

这个方法是厂商提供的,具体原因不清楚!

最初以为键盘无法弹出时因为webview焦点丢失,DispatchTouchEvent中给了焦点,没效果

//	横竖屏切换时调用mWebView.clearFocus();

转载地址:http://aefjz.baihongyu.com/

你可能感兴趣的文章
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 四种存储引擎
查看>>
MySQL 基础模块的面试题总结
查看>>
MySQL 备份 Xtrabackup
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>