WebView的使用在移动开发中,已经变得非常常见,或者可以说是不可或缺的。
WebView能加载显示网页,可以将其视为一个浏览器;使用webkit渲染引擎加载显示界面。
今天就给大家带来一个自定义demo:
带进度条的WebView:
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.widget.ProgressBar;
import com.stateunion.p2p.etongdai.R;
/**
* 自定义WebView,带有进度条
*
* @author star
*
*/
public class MyWebView extends WebView {
private ProgressBar progressbar;
@SuppressWarnings("deprecation")
public MyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
progressbar = new ProgressBar(context, null,
android.R.attr.progressBarStyleHorizontal);
progressbar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
10, 0, 0));
Drawable drawable = context.getResources().getDrawable(
R.drawable.progress_bar_states);
progressbar.setProgressDrawable(drawable);
addView(progressbar);
setWebView();
}
/**
* webView的相关设置:支持缩放,支持javascript,支持屏幕自适应
* */
@SuppressLint("SetJavaScriptEnabled")
private void setWebView() {
// 清除浏览器缓存
clearCache(true);
setWebChromeClient(new WebChromeClient());
WebSettings settings = getSettings();
settings.setUseWideViewPort(true);// 设定支持viewport
settings.setLoadWithOverviewMode(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(true);// 设定支持缩放
// 支持javascript
settings.setJavaScriptEnabled(true);
// 自适应屏幕:页面居中显示
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
settings.setLoadWithOverviewMode(true);
// 设置点击页面中链接,继续在当前browser中响应
setWebViewClient(new WebViewClient() {
@SuppressWarnings("unused")
public boolean shouldOverrideUrlLoading(MyWebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
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);
}
}
@SuppressWarnings("deprecation")
@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);
}
}
</pre><pre>
<pre code_snippet_id="1573436" snippet_file_name="blog_20160203_11_9219024" name="code" class="java" style="font-size: 18px; font-weight: bold;">具体的使用,我就不再赘述了,就像普通控件使用方式一样,简单步骤如下:
1:在布局文件中声明webview,记得加上全路径引用;</span>
2:在activity中实例化webview;</span>
3:设置webview的loadurl()方法,设置要显示的页面链接;</span>
4:相应设置:(比如响应链接,缩放,适应界面等等都已经自定义好了),这里只需做自己需要的其他设置就好;</span>
5:支持回退的设置:onKeyDown()方法。。。
示例图片: