我正在尝试使用此代码(来自here):
public class StatePreservingImplActivity extends Activity {
protected FrameLayout webViewPlaceholder;
protected WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.state_preserving_impl);
// Initialize the UI
initUI();
}
protected void initUI() {
// Retrieve UI elements
webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder));
// Initialize the WebView if necessary
if (webView == null) {
// Create the webview
webView = new WebView(this);
webView.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(true);
webView.getSettings().setLoadsImagesAutomatically(true);
// Load the URLs inside the WebView, not in the external web browser
webView.setWebViewClient(new WebViewClient());
// Load a page
}
//ATTENTION
webView.loadUrl("http://MYPAGE.php");
// Attach the WebView to its placeholder
webViewPlaceholder.addView(webView);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (webView != null) {
// Remove the WebView from the old placeholder
webViewPlaceholder.removeView(webView);
}
super.onConfigurationChanged(newConfig);
// Load the layout resource for the new configuration
setContentView(R.layout.state_preserving_impl);
// Reinitialize the UI
initUI();
}
在网页视图中,我正在尝试显示使用JavaScript和window.innerWidth / height计算内容大小的页面。开始应用后,一切正常。但是如果我旋转显示(在模拟器上通过NumPad 7或9),webView显示window.innerWidth / height的旧值的内容,尽管webView是重新加载的URL(参见//注意)。如果我旋转设备2或3或4次或更多次,它总是使用与之前状态相对应的值。
调查时间太长但我怀疑在这一行
webViewPlaceholder = ((FrameLayout)findViewById(R.id.webViewPlaceholder));
我得到了FrameLayout的旧实例,因为新布局没有时间完成加载。 我仍然不明白在这个代码示例中,WebView如何在应用程序启动后链接到FrameLayout之前将宽度和高度的正确值传递给JavaScript。
我试图找到解决方案,但没有成功。我会很高兴得到任何帮助。
P.S。对不起我的英语技能。
答案 0 :(得分:0)
问题解决了。首先,我找到onContentChanged()事件并移动initUI();从OnConfigurationChanged(..)到它。然后禁用缓存,它工作正常。这是我改变的代码:
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (mapWebView != null) {
// Remove the WebView from the old placeholder
webViewPlaceholder.removeView(mapWebView);
webView.clearView();
}
super.onConfigurationChanged(newConfig);
// Load the layout resource for the new configuration
setContentView(R.layout.web_view_layout1);
}
@Override
public void onContentChanged() {
super.onContentChanged();
initUI();
}