android中自定义带进度条WebView

我们在使用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);
        }
    }
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值