如何在加载完成后才显示webview片段

时间:2016-05-18 09:38:20

标签: java android webview fragment

一旦加载完成,是否只显示我的webview?目前我在我的主屏幕上有一个小的webview片段,但它需要一段时间来加载。我想只显示一次加载完成,因为此刻它是一个白色的屏幕,直到加载完成。这看起来不是最好的。我试图添加一个进度条,但由于某种原因,我的片段也无效。

我曾尝试添加张贴的答案,但没有区别。我认为这是因为它是一个片段,我的主要活动网络视图中的问题与进展相同。

public class WebViewFragment extends Fragment {

    WebView wv;
    private String NEWS = "mywebsite goes here";

    @Override
    public void onSaveInstanceState(Bundle outState) {
        wv.saveState(outState);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        // Checks the orientation of the screen
        if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
            Toast.makeText(getContext(), "landscape", Toast.LENGTH_SHORT).show();
        } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            Toast.makeText(getContext(), "portrait", Toast.LENGTH_SHORT).show();
        }
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final ProgressBar Pbar;
        View  view = inflater.inflate(R.layout.webviewfrag, null, false);

        if (savedInstanceState == null) {
            ((WebView )view.findViewById(R.id.NewsFeedWbview)).restoreState(savedInstanceState);
            wv = (WebView) view.findViewById(R.id.NewsFeedWbview);
            wv.setScrollbarFadingEnabled(false);
            Pbar = (ProgressBar) view.findViewById(R.id.pBwvf);

            final TextView tv = (TextView) view.findViewById(R.id.tV69);

            wv.setWebChromeClient(new WebChromeClient() {
                public void onProgressChanged(WebView view, int progress) {
                    if (progress < 100 && Pbar.getVisibility() == ProgressBar.GONE) {
                        Pbar.setVisibility(ProgressBar.VISIBLE);
                        tv.setVisibility(View.VISIBLE);
                    }
                    Pbar.setProgress(progress);
                    if (progress == 100) {
                        Pbar.setVisibility(ProgressBar.GONE);
                        tv.setVisibility(View.GONE);
                    }
                }
            });
            wv.getSettings().setJavaScriptEnabled(true);
            wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            wv.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
            wv.getSettings().setLoadsImagesAutomatically(true);
            wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

            if (Build.VERSION.SDK_INT >= 19) {
                // chromium, enable hardware acceleration
                wv.setLayerType(View.LAYER_TYPE_HARDWARE, null);
            } else {
                // older android version, disable hardware acceleration
                wv.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
            }
            wv.canGoBackOrForward(5);
            wv.getSettings().setLoadWithOverviewMode(true);
            wv.getSettings().setUseWideViewPort(true);
            wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
            wv.setPadding(0, 0, 0, 0);
            wv.loadUrl(NEWS);
        }
        return view;
    }
}

2 个答案:

答案 0 :(得分:1)

这是我的代码:

的活动:

public class WebViewActivity extends Activity {
    private WebView webView;
    private EditText urlEditText;
    private ProgressBar progress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);

        urlEditText = (EditText) findViewById(R.id.urlField);
        webView = (WebView) findViewById(R.id.webView);
        webView.setWebChromeClient(new MyWebViewClient());

        progress = (ProgressBar) findViewById(R.id.progressBar);
        progress.setMax(100);

        Button openUrl = (Button) findViewById(R.id.goButton);
        openUrl.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {
                String url = urlEditText.getText().toString();
                if (validateUrl(url)) {
                    webView.getSettings().setJavaScriptEnabled(true);
                    webView.loadUrl(url);

                    WebViewActivity.this.progress.setProgress(0);
                }
            }

            private boolean validateUrl(String url) {
                return true;
            }
        });

    }

    private class MyWebViewClient extends WebChromeClient { 
        @Override
        public void onProgressChanged(WebView view, int newProgress) {          
            WebViewActivity.this.setValue(newProgress);
            super.onProgressChanged(view, newProgress);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.web_view, menu);
        return true;
    }

    public void setValue(int progress) {
        this.progress.setProgress(progress);        
    }
}

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WebViewActivity" >

    <LinearLayout
        android:id="@+id/urlContainer"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/urlField"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:hint="Enter URL to open" />

        <Button
            android:id="@+id/goButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Open" />
    </LinearLayout>

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/urlContainer" />

    <WebView
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/progressBar" />

</RelativeLayout>

答案 1 :(得分:0)

使用以下代码

wv.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        // do your stuff here
    }
});