您的位置:首页 > 移动开发 > Android开发

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

2017-04-21 10:42 260 查看
首先非常感谢 @陈旭金-小金子 我是根据他的博客修改而来。
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"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息