软键盘弹出时RecyclerView自动滑到底部

最近公司中要做一个聊天页面,在这个页面中软键盘弹出时要让输入框和消息界面上移。很多同学看到这里应该觉得很简单吧,哪我们就试一试吧!

利用ListView实现聊天界面

设置windowSoftInputMode

在AndroidMnanifest.xml中相应的Activity加上Android:windowSoftInputMode=”adjustResize”

设置ListView中transcriptMode

在布局文件中的ListView中加入android:transcriptMode=”normal”

通过以上步骤利用ListView实现的聊天界面就可以在软键盘弹出时正常工作了。但是作为一名有追求的Android开发工程师怎么会满足于
利用ListView呢?应该利用功能更加强大,更加灵活的RecyclerView来实现啊!

利用RecyclerView实现聊天界面

利用RecyclerView实现聊天界面的步骤和ListView基本一致,但是软键盘弹出时怎么让消息列表自动滑到底部呢?各位同学可以试一试
RecyclerView没有ListView中的transcriptMode属性。那么在RecyclerView中该怎么做呢?
RecyclerView没有这个属性,那么我们只能想别的办法了,最容易想到的办法就是监听软键盘是否弹出,然后手动滚动了,其实这是一个不错的办法,
但是Android中不能直接监听软键盘是否弹出,若用这种方法写的代码一点都不够优雅。
因此只能另想它法了,既然没办法哪就只能求助于Google了,终于最后让我给找到解决办法了。其实很好办,只需要一句代码:

1
2
3
4
5
6
7
8
mRecyclerView = (RecyclerView) mRootView.findViewById(R.id.recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
layoutManager.setStackFromEnd(true);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setHasFixedSize(true);
mAdapter = new ChatMessageAdapter(mData, mContext);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());

用过RecyclerView的同学应该已经知道了就是这句:layoutManager.setStackFromEnd(true);
就是这么简单,一句话搞定。