/** * * 此WebViewWithProgress继承自Relativielayout, * 如果要设置webview的属性,要先调用getWebView()来取得 * webview的实例 * * @author Administrator * */ public class WebViewWithProgress extends RelativeLayout{ private Context context; private WebView mWebView = null; //水平进度条 private ProgressBar progressBar = null; //包含圆形进度条的布局 private RelativeLayout progressBar_circle = null; //进度条样式,Circle表示为圆形,Horizontal表示为水平 private int mProgressStyle = ProgressStyle.Horizontal.ordinal(); //默认水平进度条高度 public static int DEFAULT_BAR_HEIGHT = 8; //水平进度条的高 private int mBarHeight = DEFAULT_BAR_HEIGHT; public enum ProgressStyle{ Horizontal, Circle; }; public WebViewWithProgress(Context context) { super(context); // TODO Auto-generated constructor stub this.context = context; init(); } public WebViewWithProgress(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub this.context = context; TypedArray attributes = context.obtainStyledAttributes(attrs,R.styleable.WebViewWithProgress); mProgressStyle = attributes.getInt(R.styleable.WebViewWithProgress_progressStyle,ProgressStyle.Horizontal.ordinal()); mBarHeight = attributes.getDimensionPixelSize(R.styleable.WebViewWithProgress_barHeight, DEFAULT_BAR_HEIGHT); attributes.recycle(); init(); } private void init(){ mWebView = new WebView(context); this.addView(mWebView, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); if(mProgressStyle == ProgressStyle.Horizontal.ordinal()){ progressBar = (ProgressBar) LayoutInflater.from(context).inflate(R.layout.progress_horizontal, null); progressBar.setMax(100); progressBar.setProgress(0); WebViewWithProgress.this.addView(progressBar, LayoutParams.FILL_PARENT, mBarHeight); }else{ progressBar_circle = (RelativeLayout) LayoutInflater.from(context).inflate(R.layout.progress_circle, null); WebViewWithProgress.this.addView(progressBar_circle, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); } mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } }); mWebView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { // TODO Auto-generated method stub super.onProgressChanged(view, newProgress); if(newProgress == 100){ if(progressBar!=null){ progressBar.setVisibility(View.GONE); } if(progressBar_circle!=null){ progressBar_circle.setVisibility(View.GONE); } }else{ if(mProgressStyle == ProgressStyle.Horizontal.ordinal()){ progressBar.setVisibility(View.VISIBLE); progressBar.setProgress(newProgress); }else{ progressBar_circle.setVisibility(View.VISIBLE); } } } }); } public WebView getWebView() { return mWebView; } }
在xml中使用:
<com.example.WebViewWithProgress android:id="@+id/detail_webview" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/page_bg" WebViewWithProgress:progressStyle="horizontal" />
在代码中设置webview属性:
mWebViewWithProgress = (WebViewWithProgress) findViewById(R.id.detail_webview); mWebView = mWebViewWithProgress.getWebView(); mWebView.getSettings().setJavaScriptEnabled(false); mWebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
效果:
demo下载:带加载进度条的WebView
时间: 2024-10-07 05:30:14