android 聊天用RecyclerView获取键盘高度和消息自动显示在最底部(亲测好用)

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 聊天用RecyclerView获取键盘高度和消息自动显示在最底部(亲测好用))