我们在使用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);
}
}