官方是不建议滚动组件相互嵌套的,但是碍于奇怪的需求,有时候又不可避免; 最近需要一种效果:Button随WebView一起滚动,所以用到了ScrollView与WebView的嵌套。这样的使用产生了两个问题:
1) 部分机型WebView在切换页时,会产生宽度与高度重定位异常,也就是显示不正常
2)滚动事件的相互冲突问题
这里记录一下重定位问题的解决方案,网上思路,名曰Js注入,非原创!
1) 添加调用引用,便于Js调用本地重新测量尺寸
webView.addJavascriptInterface(this, "App");
2)在onPageFinish中,添加Js注入
webview.loadUrl("javascript:App.resize(document.body.getBoundingClientRect().height)");
3)在当前类中添加调用方法,部分版本需要添加@JavaScriptInterface
public void resize(final float height) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mBottomWebView.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height *getResources().getDisplayMetrics().density)));
}
});
}