实际项目中,android需要加载h5,经常遇到软键盘遮盖输入框的情况,h5测试的时候,是没问题的,但是在APP中是不能把页面推上去。经测试完美解决了这个问题。
1. oncreate
***************************
try {
web();
layoutParams = (ConstraintLayout.LayoutParams) webView.getLayoutParams();
decorView = getActivity().getWindow().getDecorView();
decorView = getActivity().getWindow().getDecorView();
if (decorView != null) {
globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (webView != null) {
Rect rect = new Rect();
decorView.getWindowVisibleDisplayFrame(rect);
int screenHeight = decorView.getRootView().getHeight();
int keyboardHeight = screenHeight - rect.bottom;
if (currentHeight != keyboardHeight && keyboardHeight > 100) {
currentHeight = keyboardHeight;
ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) webView.getLayoutParams();
if (layoutParams != null) {
layoutParams.bottomMargin = keyboardHeight;
webView.setLayoutParams(layoutParams);
}
}
}
}
};
ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver();
if (viewTreeObserver != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
viewTreeObserver.addOnGlobalLayoutListener(globalLayoutListener);
}
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
*****************************
2. 不要忘记
onDestroyView 销毁资源
public void onDestroyView() {
super.onDestroyView();
if (webView != null) {
webView.stopLoading();
webView.clearCache(true);
webView.clearHistory();
webView.destroy(); // 注意:调用destroy()后,WebView实例就不能再使用了
webView = null;
}
if (decorView != null && decorView.getViewTreeObserver() != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
decorView.getViewTreeObserver().removeOnGlobalLayoutListener(globalLayoutListener);
}
}
欢迎转发、点赞、收藏。---------一个奋斗前线的老码农。