最近项目中要做一个聊天界面,布局采用的是recyclerView,但是在点击edittext的时候会将界面的一部分内容遮住,这明显不是我们想要的结果,因为市面上的聊天软件人家都是没有遮挡的呀,接着我在聊天所在activity中设置了一个属性android:windowSoftInputMode=”adjustPan”,嗯,问题解决了,当弹出软键盘的时候布局自动顶上去了,但是新问题又产生了我的标题栏也被一起顶出去了,额,这个不是我想要的结果啊,所以只能采用别的方法,最后在一系列尝试之后采用了如下的方法完美解决的问题,那就是给recycleview设置一个全局布局监听器:
recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Log.i(TAG, "onGlobalLayout: ");
Rect r = new Rect();
getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
if (mScreenHeight == 0) {
mScreenHeight = r.bottom;
}
mNowKeyboardHeight = mScreenHeight - r.bottom;
if (mOldKeyboardHeight != -1 && mNowKeyboardHeight != mOldKeyboardHeight) {
if (mNowKeyboardHeight > 0) {
recyclerView.scrollToPosition(0);
} else {
recyclerView.scrollToPosition(0);
}
}
mOldKeyboardHeight = mNowKeyboardHeight;
}
});
在监听器的里边我们写了几行代码,当监测到软键盘弹出的时候我们使recyclerView滚动到第一条可见位置,当然我这里的position使0,大家根据服务器传的数据的不同也可以传recyclerview.getAdaper.getItemCount()-1等,这个灵活使用,代码中的变量都是int变量而已,直接生成就可以。