"可以通过监听软键盘的显示状态,来动态调整页面布局,以避免软键盘挡住文本框的问题。具体做法如下:
- 在 AndroidManifest.xml 文件中,给当前 Activity 添加属性:
<activity
android:windowSoftInputMode=\"adjustResize\" />
这个属性的作用是当软键盘弹出时,自动调整页面布局,以避免挡住文本框。
- 在布局文件中,给文本框所在的父容器添加属性:
<LinearLayout
android:fitsSystemWindows=\"true\"
...>
<EditText
... />
</LinearLayout>
这个属性的作用是使父容器可占用系统窗口区域,从而避免软键盘挡住文本框。
- 在 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 弹出的软键盘挡住文本框的问题。"