Android WebView加载网页进度监听

来源:互联网 发布:cad看图软件 mac 免费 编辑:程序博客网 时间:2024/05/23 23:46

首先是布局R.layout.activity_main

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.sportsii.webviewdemo.MainActivity">    <LinearLayout        android:id="@+id/webView_layout"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <ProgressBar            android:id="@+id/progressBar"            style="?android:attr/progressBarStyleHorizontal"            android:layout_width="match_parent"            android:layout_height="3dp"            android:progressDrawable="@drawable/progressbar_carch" />        <WebView            android:id="@+id/webView"            android:layout_width="match_parent"            android:layout_height="match_parent"></WebView>    </LinearLayout>    <TextView        android:id="@+id/error_tv"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:gravity="center"        android:text="网络连接错误"        android:textSize="30dp"        android:visibility="gone" /></RelativeLayout>

然后是 ProgressBar样式

<?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>            <corners android:radius="2.0dip" />            <gradient                android:angle="270.0"                android:centerColor="#FFFFFF"                android:centerY="2.0"                android:endColor="#FFFFFF"                android:startColor="#FFFFFF" />        </shape>    </item>    <item android:id="@android:id/progress">        <clip>            <shape>                <corners android:radius="2.0dip" />                <gradient                    android:angle="270.0"                    android:centerColor="#8bc34a"                    android:centerY="2.0"                    android:endColor="#8bc34a"                    android:startColor="#8bc34a" />            </shape>        </clip>    </item></layer-list>
最后是逻辑代码(如果加载失败会显示加载失败的界面)

package com.example.sportsii.webviewdemo;import android.graphics.Bitmap;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.KeyEvent;import android.view.View;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.LinearLayout;import android.widget.ProgressBar;import android.widget.TextView;public class MainActivity extends AppCompatActivity {    private LinearLayout webLLayout;    private TextView errorTv;    private WebView webView;    private ProgressBar progressBar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        webView = (WebView) findViewById(R.id.webView);        progressBar = (ProgressBar) findViewById(R.id.progressBar);        webLLayout = (LinearLayout) findViewById(R.id.webView_layout);        errorTv = (TextView) findViewById(R.id.error_tv);        initViews();    }    private void initViews() {//支持javascript        webView.getSettings().setJavaScriptEnabled(true);        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口        // 设置可以支持缩放        webView.getSettings().setSupportZoom(true);        // 设置出现缩放工具        webView.getSettings().setBuiltInZoomControls(true);        //扩大比例的缩放        webView.getSettings().setUseWideViewPort(true);        webView.getSettings().setAllowFileAccess(true);        webView.getSettings().setLoadsImagesAutomatically(true);// 支持自动加载图片        //自适应屏幕        webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);        webView.getSettings().setLoadWithOverviewMode(true);        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);        webView.setWebChromeClient(new WebChromeClient() {            @Override            public void onProgressChanged(WebView view, int newProgress) {                super.onProgressChanged(view, newProgress);                progressBar.setProgress(newProgress);            }        });        webView.setWebViewClient(new WebViewClient() {            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                super.onPageStarted(view, url, favicon);                progressBar.setVisibility(View.VISIBLE);            }            @Override            public void onPageFinished(WebView view, String url) {                super.onPageFinished(view, url);                progressBar.setVisibility(View.GONE);            }            //请求失败时显示失败的界面            @Override            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {                super.onReceivedError(view, errorCode, description, failingUrl);                webLLayout.setVisibility(View.GONE);                errorTv.setVisibility(View.VISIBLE);            }        });        webView.loadUrl(" http://blog.csdn.net/mchenys/article/details/49930739");    }    // 改写手机物理按键--返回的逻辑    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            if (webView.canGoBack()) {                webView.goBack();// 返回上一页面                return true;            } else {                finish();                // System.exit(0);// 退出程序            }        }        return super.onKeyDown(keyCode, event);    }}



原创粉丝点击