天天看點

WebView加載網頁,頂部帶有進度條

【drawable】progress_style.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 總進度的顔色 -->
    <item android:id="@android:id/background">
        <shape>
            <solid android:color="" />
        </shape>
    </item>

    <!-- 緩存的顔色 -->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <solid android:color="" />
            </shape>
        </clip>
    </item>

    <!-- 目前進度的顔色 -->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <solid android:color="" />
            </shape>
        </clip>
    </item>

</layer-list>
           

【layout】

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fadingEdge="none"
            android:overScrollMode="never" />

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="match_parent"
            android:layout_height="8px"
            android:layout_gravity="top"
            android:progressDrawable="@drawable/progress_style"
            android:visibility="gone" />
    </FrameLayout>
           

【activity】

WebView webView;
 ProgressBar progressBar;

 private void initView() {
        webView = findViewById(R.id.webview);
        progressBar = findViewById(R.id.progressBar);

        WebSettings webSettings = webView.getSettings();
        //如果通路的頁面中要與Javascript互動,則webview必須設定支援Javascript
        webSettings.setJavaScriptEnabled(true);
        //網頁在app内打開
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (newProgress == ) {
                    progressBar.setVisibility(View.GONE);//加載完網頁進度條消失
                } else {
                    progressBar.setVisibility(View.VISIBLE);//開始加載網頁時顯示進度條
                    progressBar.setProgress(newProgress);//設定進度值
                }
                super.onProgressChanged(view, newProgress);
            }
        });
    }
           

擴充:騰訊X5

用于解決過,伺服器擷取不到cookie的情況

豐富:webview詳細

public void webViewSetting(WebView webView, final ProgressBar progressBar) {
        WebSettings webSettings = webView.getSettings();
        //如果通路的頁面中要與Javascript互動,則webview必須設定支援Javascript
        webSettings.setJavaScriptEnabled(true);

        //縮放操作
        webSettings.setSupportZoom(true); //支援縮放,預設為true。是下面那個的前提。
        webSettings.setBuiltInZoomControls(true); //設定内置的縮放控件。若為false,則該WebView不可縮放
        webSettings.setDisplayZoomControls(false); //隐藏原生的縮放控件

        //設定自适應螢幕,兩者合用
        webSettings.setUseWideViewPort(true);   //将圖檔調整到合适的大小
        webSettings.setLoadWithOverviewMode(true); // 縮放至螢幕的大小

        String userAgentString = webSettings.getUserAgentString();
        webSettings.setUserAgent(userAgentString);

        webSettings.setDatabaseEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setAppCacheEnabled(true);
        LogUtil.e("TAG", "userAgentString:" + userAgentString);

        //覆寫WebView預設使用第三方或系統預設浏覽器打開網頁的行為,使網頁用WebView打開
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        //webview加載進度
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
            }
        });
    }