【Android】输入框多次点击触发后被键盘遮挡问题

问题

在android开发中,有时候我们需要多次点击同一个输入框,比如我们在点击一个输入框之后,输入数据,然后关闭键盘,此时输入框的光标还在闪动,但是我们想修改这个输入框的数据,然后再次点击这个输入框,但是键盘弹起之后将输入框给挡住了(假设此输入框在页面下部)

解决方式

1.找到此页面在AndroidManifest.xml的 activity 标签(如果是Fragment,就找到父类Activity的 activity标签),然后添加

android:windowSoftInputMode="adjustResize"

如果想要其他的效果也可以一并添上,比如

android:windowSoftInputMode="adjustResize|stateHidden"

2.找到此Activity的xml对应文件,在最顶部的View加上,如果是Fragment,就找到父类Activity的xml文件

android:fitsSystemWindows="true"
android:id="@+id/ll_rout"

3.在Activity里面(如果是Fragment,就找到父类Activity),添加

private LinearLayout llRout;
//获取到
llRout = findViewById(R.id.ll_rout);

4.在Activity里面添加此方法

private void controlKeyboardLayout(final View root) {
        final View decorView = getWindow().getDecorView();
        decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect rect = new Rect();
                decorView.getWindowVisibleDisplayFrame(rect);
                int screenHeight = decorView.getRootView().getHeight();

                int keyboardHeight = screenHeight - rect.bottom;

                if (keyboardHeight > screenHeight * 0.15) {
                    View focusView = root.findFocus();
                    if (focusView != null) {
                        int[] location = new int[2];
                        focusView.getLocationOnScreen(location);
                        int viewBottom = location[1] + focusView.getHeight();

                        int scrollDistance = viewBottom - (screenHeight - keyboardHeight);
                        if (scrollDistance > 0) {
                            root.scrollBy(0, scrollDistance);
                        }
                    }
                } else {
                    root.scrollTo(0, 0);
                }
            }
        });
    }

5.在 onCreate 里面调用此方法

controlKeyboardLayout(llRout);

你可能感兴趣的:(Android学习笔记,android)