android手机的微信H5弹出的软键盘挡住了文本框,如何解决?

374 阅读1分钟

"可以通过监听软键盘的显示状态,来动态调整页面布局,以避免软键盘挡住文本框的问题。具体做法如下:

  1. 在 AndroidManifest.xml 文件中,给当前 Activity 添加属性:
<activity
    android:windowSoftInputMode=\"adjustResize\" />

这个属性的作用是当软键盘弹出时,自动调整页面布局,以避免挡住文本框。

  1. 在布局文件中,给文本框所在的父容器添加属性:
<LinearLayout
    android:fitsSystemWindows=\"true\"
    ...>
    <EditText
        ... />
</LinearLayout>

这个属性的作用是使父容器可占用系统窗口区域,从而避免软键盘挡住文本框。

  1. 在 Activity 的 onCreate 方法中,监听软键盘的显示状态,并根据状态动态调整页面布局:
private View mRootView;
private ViewTreeObserver.OnGlobalLayoutListener mLayoutChangeListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRootView = findViewById(R.id.root_view);
    mLayoutChangeListener = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            Rect rect = new Rect();
            mRootView.getWindowVisibleDisplayFrame(rect);
            int screenHeight = mRootView.getRootView().getHeight();
            int heightDiff = screenHeight - rect.bottom;
            if (heightDiff > screenHeight / 3) { // 说明软键盘弹出
                // 动态调整页面布局,避免软键盘挡住文本框
                ...
            } else {
                // 软键盘收起,恢复页面布局
                ...
            }
        }
    };
    mRootView.getViewTreeObserver().addOnGlobalLayoutListener(mLayoutChangeListener);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mRootView != null && mLayoutChangeListener != null) {
        mRootView.getViewTreeObserver().removeOnGlobalLayoutListener(mLayoutChangeListener);
    }
}

这里的 root_view 是布局文件最外层的根布局,通过监听它的布局变化,来判断软键盘是否弹出。如果弹出了,就动态调整页面布局,以避免挡住文本框;如果收起了,就恢复原来的布局。

通过上述方法,可以有效地解决 Android 手机上微信 H5 弹出的软键盘挡住文本框的问题。"