问题描述:
我使用 RecyclerView 来做消息列表,但是在软键盘弹起时会遮挡住 RecyclerView,而不是将 RecyclerView 与输入框一起顶上去。
清单文件里的 android:windowSoftInputMode 我设置为 adjustResize没效果。试过设置为 adjustPan,但是会将 标题栏也顶出布局外面。
问:该怎样才能做到像微信那样弹出软键盘会将 RecyclerView 顶上去?
问题描述:
我使用 RecyclerView 来做消息列表,但是在软键盘弹起时会遮挡住 RecyclerView,而不是将 RecyclerView 与输入框一起顶上去。
清单文件里的 android:windowSoftInputMode 我设置为 adjustResize没效果。试过设置为 adjustPan,但是会将 标题栏也顶出布局外面。
问:该怎样才能做到像微信那样弹出软键盘会将 RecyclerView 顶上去?
对于RecyclerView来说,你需要两个配置,一是,android:windowSoftInputMode="adjustResize"
,再就是代码初始化RecyclerView的时候加上这个
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//这是重点
layoutManager.setReverseLayout(true);
mRecyclerView.setLayoutManager(layoutManager);
AndroidManifest设置Activity的软键盘状态 android:windowSoftInputMode="stateHidden|adjustResize"
//设置布局管理器
LinearLayoutManager mManager = new LinearLayoutManager(mContext);
mManager.setStackFromEnd(true); //关键
recyclerView.setLayoutManager(mManager);
ayoutManager.setReverseLayout(true);
这句会导致只有1条数据时,显示在最底部, 并不符合常见场景。
可以尝试一下以下代码:
mRecyclerView.addOnLayoutChangeListener(new OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if (bottom < oldBottom) {
mRecyclerView.post(new Runnable() {
@Override
public void run() {
if (mChatAdapter.getItemCount() > 0) {
mRecyclerView.smoothScrollToPosition(mChatAdapter.getItemCount() - 1);
}
}
});
}
}
});
但是感觉依旧不够优雅,不能和软键盘同步上升。
求更好的解决方案。
1 回答841 阅读✓ 已解决
1 回答1.7k 阅读
1 回答1.5k 阅读
1 回答1.5k 阅读
1 回答1.2k 阅读
2 回答944 阅读
1 回答774 阅读
标题栏被顶起来应该是你布局文件没写对,我需要知道你xml怎么写的,另外,还有可能其实不是被遮挡,而且RecyclerView没有滑动到最底部而已