WebView在第一页加载时渲染的布局太小

时间:2015-02-20 18:43:49

标签: android webview

当我从应用程序中打开webview并第一次加载此page时,它会以错误的方式呈现:内容以非常精简的列呈现。见这里:

enter image description here

一旦我重新加载webview或离开并再次打开片段,一切都很好:

enter image description here

杀死应用程序(清理内存)可以使错误重现。该错误可在选定的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;
    }
});

5 个答案:

答案 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>`

同样的问题出现在我的代码中,经过上述更改后,其工作正常。