android 聊天用RecyclerView获取键盘高度和消息自动显示在最底部(亲测好用)
16lz
2021-01-23
android | androidx 聊天用RecyclerView获取键盘和消息自动显示在最底部
话不多说,直接代码,自行理解
第一步
在manifests的application中添加
android:windowSoftInputMode="stateHidden|adjustResize"
第二步
/** * 获取一个视图的宽高(软键盘) */ private class KeyboardListener implements ViewTreeObserver.OnGlobalLayoutListener { private boolean isShow; private int getScreenHeight() { DisplayMetrics outMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getRealMetrics(outMetrics); return outMetrics.heightPixels; } @Override public void onGlobalLayout() { Rect rect = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); int screenHeight = getScreenHeight(); int keyboardHeight = screenHeight - rect.bottom;//软键盘高度 if (Math.abs(keyboardHeight) > screenHeight / 5 && !isShow) { if (recyclerView!= null && adapter != null && adapter.getItemCount() != 0) { recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1); } isShow = true; } else { isShow = false; } } }
第三步
在onCreate中调用即可
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new KeyboardListener());
最后(完成)
数据初始化最底部
adapter.addItem(data);recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1);
附加
键盘在输入框半截问题(解决)
<androidx.appcompat.widget.AppCompatEditText android:id="@+id/xxx" android:layout_width="0dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginStart="15dp" android:layout_marginTop="5dp" android:layout_marginEnd="10dp" android:layout_weight="19" android:background="@drawable/cover" android:inputType="textMultiLine" android:paddingStart="10dp" android:paddingTop="5dp" android:singleLine="false" android:textColor="@color/dark_blue" tools:ignore="RtlSymmetry" />
<?xml version="1.0" encoding="UTF-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <solid android:color="#0000" /> </shape> </item> <!-- 主体背景颜色值 --> <item android:bottom="10dp"> <shape android:shape="rectangle"> <solid android:color="#fff" /> <padding android:bottom="15dp" /> <corners android:radius="5dp" /> <stroke android:width="1dp" android:color="#efefef" /> </shape> </item></layer-list>
更多相关文章
- Android 键盘布局总结
- Android开发EditText不自动弹出键盘
- 关于EditText 焦点 及 软键盘弹出引起不适 的几点
- Android 5.0 SystemUI 视图框架
- Android中软键盘弹出时底部菜单上移问题
- Android中关于软键盘的一些设置
- Android EditText通过imeOptions属性控制软键盘的回车键变化:回车
- Android模拟键盘和键盘监听
- Android软键盘挡住输入框