天天看点

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);
            }
        });
    }