package me.weyye.todaynews.ui.view; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import me.weyye.todaynews.R; import me.weyye.todaynews.utils.NetworkUtil; /** * 带进度条的WebView */ public class ProgressWebView extends WebView { private ProgressBar progressbar; public ProgressWebView(Context context, AttributeSet attrs) { super(context, attrs); progressbar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal); progressbar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 5, 0, 0)); Drawable drawable = context.getResources().getDrawable(R.drawable.progress_bar_states); progressbar.setProgressDrawable(drawable); addView(progressbar); setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { boolean isShould; if (NetworkUtil.isNetworkUrl(url)) { view.loadUrl(url); isShould = true; } else { isShould = false; } return isShould; } }); setWebChromeClient(new WebChromeClient()); WebSettings settings = getSettings(); settings.setJavaScriptEnabled(true); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); settings.setDomStorageEnabled(true); DisplayMetrics metrics = getResources().getDisplayMetrics(); int mDensity = metrics.densityDpi; Log.d("maomao", "densityDpi = " + mDensity); if (mDensity == 240) { settings.setDefaultZoom(WebSettings.ZoomDensity.FAR); } else if (mDensity == 160) { settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); } else if(mDensity == 120) { settings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE); }else if(mDensity == DisplayMetrics.DENSITY_XHIGH){ settings.setDefaultZoom(WebSettings.ZoomDensity.FAR); }else if (mDensity == DisplayMetrics.DENSITY_TV){ settings.setDefaultZoom(WebSettings.ZoomDensity.FAR); }else{ settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); } } public class WebChromeClient extends android.webkit.WebChromeClient { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { progressbar.setVisibility(GONE); } else { if (progressbar.getVisibility() == GONE) progressbar.setVisibility(VISIBLE); progressbar.setProgress(newProgress); } super.onProgressChanged(view, newProgress); } } public void setTextSize(int size) { } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { LayoutParams lp = (LayoutParams) progressbar.getLayoutParams(); lp.x = l; lp.y = t; progressbar.setLayoutParams(lp); super.onScrollChanged(l, t, oldl, oldt); } }