android中自定义带进度条WebView

来源:互联网 发布:淘宝虚假交易订单清洗 编辑:程序博客网 时间:2024/05/16 12:17

我们在使用webView时经常需要显示加载进度条,都会这样写,感觉比较麻烦。所以我就需要组合自定义View来实现,其实很简单,很好理解。我只是记录下来方便使用,不喜勿吐

这里写图片描述

public class CustomWebView extends RelativeLayout {    Context context;    private WebView webView;    private ProgressBar progressBar;    public CustomWebView(Context context) {        this(context,null);    }    public CustomWebView(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public CustomWebView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        this.context=context;        init();    }    //初始化webView progressBar    private void init() {        webView=new WebView(context);        webView.setOverScrollMode(OVER_SCROLL_NEVER);        webView.setHorizontalScrollBarEnabled(false);//水平不显示        webView.setVerticalScrollBarEnabled(false); //垂直不显示        progressBar=new ProgressBar(context,null,android.R.attr.progressBarStyleHorizontal);        webView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));        WebSettings settings=webView.getSettings();        //允许JS执行        settings.setJavaScriptEnabled(true);        //设置为使用webview推荐的窗口        settings.setUseWideViewPort(true);        //设置网页自适应屏幕大小 ---这个属性应该是跟上面一个属性一起用        settings.setLoadWithOverviewMode(true);        settings.setDomStorageEnabled(true);        webView.setWebChromeClient(new MyClient());        addView(webView);        progressBar.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,4));        progressBar.setMax(100);        Drawable draw =ContextCompat.getDrawable(context,R.drawable.progress_web);//进度条样式        progressBar.setProgressDrawable(draw);        addView(progressBar);    }    public void loadDataWithBaseURL(String data){        webView.loadDataWithBaseURL("about:blank",data,"text/html","utf-8",null);    }    //加载网页    public void loadUrl(String url){        webView.loadUrl(url);    }    //判断是否可返回    public boolean canGoBack(){        return webView.canGoBack();    }    //返回    public void goBack(){        webView.goBack();    }    public void setWebViewClient(WebViewClient webVlient){        webView.setWebViewClient(webVlient);    }    private class MyClient extends WebChromeClient {        @Override        public void onProgressChanged(WebView view, int newProgress) {            progressBar.setProgress(                    newProgress);            if(newProgress==100){                progressBar.setVisibility(View.GONE);            }            super.onProgressChanged(view, newProgress);        }    }
原创粉丝点击