美文网首页
Android 键盘遮挡视图问题解决方案

Android 键盘遮挡视图问题解决方案

作者: 旺仔爸 | 来源:发表于2020-08-28 15:23 被阅读0次

效果图

image.png

方法一

设置Activity android:windowSoftInputMode 属性

<activity android:name=".module.write.activity.WriteActivity" android:windowSoftInputMode="adjustResize"/>

方法二

当方法一设置无效的时候实现思路
1,监听键盘打开关闭状态

监听键盘打开关闭状态代码

public class SoftKeyBoardListener {

    private View rootView;//activity的根视图
    int rootViewVisibleHeight;//纪录根视图的显示高度
    private OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener;

    public SoftKeyBoardListener(Activity activity) {
        //获取activity的根视图
        rootView = activity.getWindow().getDecorView();

        //监听视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变
        rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                //获取当前根视图在屏幕上显示的大小
                Rect r = new Rect();
                rootView.getWindowVisibleDisplayFrame(r);

                int visibleHeight = r.height();
                System.out.println(""+visibleHeight);
                if (rootViewVisibleHeight == 0) {
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }

                //根视图显示高度没有变化,可以看作软键盘显示/隐藏状态没有改变
                if (rootViewVisibleHeight == visibleHeight) {
                    return;
                }

                //根视图显示高度变小超过200,可以看作软键盘显示了
                if (rootViewVisibleHeight - visibleHeight > 200) {
                    if (onSoftKeyBoardChangeListener != null) {
                        onSoftKeyBoardChangeListener.keyBoardShow(rootViewVisibleHeight - visibleHeight);
                    }
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }

                //根视图显示高度变大超过200,可以看作软键盘隐藏了
                if (visibleHeight - rootViewVisibleHeight > 200) {
                    if (onSoftKeyBoardChangeListener != null) {
                        onSoftKeyBoardChangeListener.keyBoardHide(visibleHeight - rootViewVisibleHeight);
                    }
                    rootViewVisibleHeight = visibleHeight;
                    return;
                }

            }
        });
    }

    private void setOnSoftKeyBoardChangeListener(OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {
        this.onSoftKeyBoardChangeListener = onSoftKeyBoardChangeListener;
    }

    public interface OnSoftKeyBoardChangeListener {
        void keyBoardShow(int height);

        void keyBoardHide(int height);
    }

    public static void setListener(Activity activity, OnSoftKeyBoardChangeListener onSoftKeyBoardChangeListener) {
        SoftKeyBoardListener softKeyBoardListener = new SoftKeyBoardListener(activity);
        softKeyBoardListener.setOnSoftKeyBoardChangeListener(onSoftKeyBoardChangeListener);
    }

}

2,键盘打开关闭时候动态设置要位于键盘之上View的layout_marginBottom 值

        SoftKeyBoardListener.setListener(requireActivity(), object : SoftKeyBoardListener.OnSoftKeyBoardChangeListener{
            override fun keyBoardShow(height: Int) {
                var toolViewLayout:RelativeLayout.LayoutParams = toolView.layoutParams as RelativeLayout.LayoutParams
                var fablayout:RelativeLayout.LayoutParams = fab.layoutParams as RelativeLayout.LayoutParams
                toolViewLayout.bottomMargin = height
                fablayout.bottomMargin = height+ SizeUtils.dp2px(24f)
                toolView.requestLayout()
                fab.requestLayout()
                LogTools.d("keyBoardShow$height")
            }

            override fun keyBoardHide(height: Int) {
                LogTools.d("keyBoardShow$height")
                var toolViewLayout:RelativeLayout.LayoutParams = toolView.layoutParams as RelativeLayout.LayoutParams
                var fablayout:RelativeLayout.LayoutParams = fab.layoutParams as RelativeLayout.LayoutParams
                toolViewLayout.bottomMargin = 0
                fablayout.bottomMargin = SizeUtils.dp2px(24f)
                toolView.requestLayout()
                fab.requestLayout()
            }

        })

布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.smart.journal.module.write.WriteFragment">
    
    <include layout="@layout/toolbar" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/writeRecycleView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/toolView"
        android:layout_below="@+id/toolbar"
        android:background="@color/write"
        android:padding="12dp" />

    <com.smart.journal.module.write.views.ToolView
        android:id="@+id/toolView"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_alignParentBottom="true"
        />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_margin="16dp"
        android:layout_marginBottom="24dp"
        android:backgroundTint="@android:color/holo_red_light"
        android:tint="#FFFFFF"
        android:visibility="visible"
        app:borderWidth="0dp"
        app:srcCompat="@drawable/ic_journal_save" />
</RelativeLayout>

相关文章

  • Android 键盘遮挡视图问题解决方案

    效果图 方法一 设置Activity android:windowSoftInputMode 属性 方法二 当方法...

  • Android软键盘-弹起时布局向上拉-登录界面

    本文参照Android 模仿QQ登录界面解决软键盘遮挡问题进行整理修正Android软键盘系列: Android软...

  • iOS表单键盘遮挡问题

    iOS表单键盘遮挡问题 iOS表单键盘遮挡问题

  • Flutter 开发问题总结

    1.软键盘遮挡问题 场景:界面上有许多输入框 当软键盘弹起的使用遮挡 影响用户直观的输入解决方式:android ...

  • Flutter 键盘遮挡住了控件

    Flutter中使用TextField输入框,会有键盘遮挡问题: 解决方案: 在页面的Scaffold里面添加属性...

  • Android 软键盘遮挡问题

    Android爬坑之旅:软键盘挡住输入框问题的终极解决方案本篇着重介绍:软键盘是由WebView中的网页元素所触发...

  • 键盘遮挡问题

    不知道大家是否遇见过这种问题,就是在准备输入文字的时候键盘弹出来遮挡住了输入框,导致无法输入.今天给大家讲讲这个问...

  • 键盘遮挡问题

    pods: pod 'IQKeyboardManager' 头文件 pod 'IQKeyboardManager' 搞定

  • 键盘遮挡问题

    总结下之前项目中遇到的键盘遮挡问题,分三种情况: 1.简单的页面,如登录页面等我会用自己封装的KeyBoardMa...

  • iOS中view遮挡键盘方法

    在实际开发中,有许多跟键盘打交道的地方: 避免键盘遮挡视图(注册通知,键盘出现和消失时改变视图位置) 自定义表情键...

网友评论

      本文标题:Android 键盘遮挡视图问题解决方案

      本文链接:https://www.haomeiwen.com/subject/buylsktx.html