当我从应用程序中打开webview并第一次加载此page时,它会以错误的方式呈现:内容以非常精简的列呈现。见这里:
一旦我重新加载webview或离开并再次打开片段,一切都很好:
杀死应用程序(清理内存)可以使错误重现。该错误可在选定的Android设备上重现。 有什么想法吗?
------编辑-------
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/white" >
<WebView
android:id="@+id/fragment_web_view_wv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
这是WebView初始化代码:
mWebView = (WebView) getView().findViewById(R.id.fragment_web_view_wv);
mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
mWebView.setWebViewClient(new WebViewClient());
mWebView.setWebChromeClient(new WebChromeClient() {
private boolean mShowingProgressbar = false;
@Override
public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,
android.webkit.WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(spaceNeeded * 2);
}
public void onConsoleMessage(String message, int lineNumber, String sourceID) {
Log.d("Javascript", message + " ---- From line " + lineNumber);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
progressBarPopup.dismiss();
mShowingProgressbar = false;
} else if (!mShowingProgressbar) {
progressBarPopup.show();
mShowingProgressbar = true;
}
super.onProgressChanged(view, newProgress);
}
});
mWebView.getSettings().setDomStorageEnabled(false);
// Set cache size to 8 mb by default. should be more than enough
mWebView.getSettings().setAppCacheMaxSize(1024 * 1024 * 8);
String appCachePath = getActivity().getApplicationContext().getCacheDir().getAbsolutePath();
mWebView.getSettings().setAppCachePath(appCachePath);
mWebView.getSettings().setAllowFileAccess(true);
mWebView.getSettings().setAppCacheEnabled(true);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
mWebView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setSavePassword(false);
mWebView.getSettings().setUserAgentString("anne-eli");
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setLoadWithOverviewMode(false);
// mWebView.addJavascriptInterface(new JavaScriptInterface(),
// "Android");
// Workaround for the issue:
// https://code.google.com/p/android/issues/detail?id=7189
mWebView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
答案 0 :(得分:0)
尝试按以下方式初始化WebView设置:
WebView webview= (Webview) view.findViewById(R.id.fragment_web_view_wv);//initialize webview
webview.getSettings().setUseWideViewPort(true);
webview.getSettings().setLoadWithOverviewMode(false);
然后加载网址。此外,您可以尝试通过以下方式放大:
webview.setInitialScale(100);
答案 1 :(得分:0)
这看起来很奇怪,但它适用于我的情况,
<WebView
android:id="@+id/fragment_web_view_wv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
答案 2 :(得分:0)
添加以下代码:
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
}
到setWebViewClient(...)
检查加载错误。
答案 3 :(得分:0)
面对同样的问题,我不得不通过在包含我内容的div中添加一个任意大的margin-top来移动我的内容,然后在加载内容时通过执行一段Javascript将其移回。我发现当你无法控制HTML时,这不是一个解决方案。
答案 4 :(得分:0)
使用此代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<WebView
android:id="@+id/id"
android:layout_width="match_parent"
android:background="#fff"
android:adjustViewBounds="true"
android:layout_height="match_parent"/>
</LinearLayout>`
同样的问题出现在我的代码中,经过上述更改后,其工作正常。