Android软键盘弹出界面遮挡解决方案。

首先非常感谢 @陈旭金-小金子 我是根据他的博客修改而来。


http://blog.csdn.net/u011692041/article/details/51933987#comments

他的原文。如果你们也遇到这样的需求可以看他的,看不懂再回来。


  /**
     * 在聊天的内容比较多的时候没有问题,当时在内容比较少的时候上面的内容就会看不见,所以这个方法也是不可取的
     * @param root             最外层布局
     */
    private void controlKeyboardLayout(final View root) {
        root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            private Rect r = new Rect();
            @Override
            public void onGlobalLayout() {
                //获取当前界面可视部分
                ChatActivity.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
                //获取屏幕的高度
                int screenHeight = ChatActivity.this.getWindow().getDecorView().getRootView().getHeight();
                //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数(可以自己打Log测试)
                int heightDifference = screenHeight - r.bottom;
                //内容部分的View
                ViewGroup.LayoutParams layoutParams = mChatSwipeLayout.getLayoutParams();
                //拿到需要调整的高度,这里需要按照实际情况计算你们自己的高度
                //拿到            屏幕高度 -状态栏高度 - 键盘高度 = 获得内容(聊天recyclerView)的高度
                int height = screenHeight - stateHeight - heightDifference ;
                //如果计算出来的和原来的不一样,那么就调整一下
                //给内容View 设置新的高度
                layoutParams.height = height;
                //该activity根布局重新布局
                mRootView.requestLayout();
                //滑动recyclerView到最底部
                moveToPosition(mLinearLayoutManager,mRvList,mChatRecAdapter.getList().size()-1);
            }
        });
    }
这是聊天代码关键方法。(我这里有一个swiperefreshLayout包裹recyclerView所以我调整swiperefreshLayout的高度)
最后记得要滑动recyclerView。


我的布局文件使用了状态栏沉浸。

android:fitsSystemWindows="true"

相信大家也有可能因为这个问题烦恼,也找过

AndroidBug5497Workaround

但是相信效果肯定不是很好。
所以可以用以上的方法。
对了 在清单文件配置中。 使用的是 
android:windowSoftInputMode="adjustResize"


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值