android webview自带进度条,Android 实现带进度条的WebView的实例

Android 实现带进度条的WebView的实例

1. WebView加载网页方法

//加载本地资源

loadUrl("file:///android_asset/example.html");

//加载网络资源

loadUrl("http://baidu.com");

2. 带进度的Drawable文件view_progress_webview

颜色值为进度颜色,根据需要更换

3. ProgressWebView类

/**

* 带进度条的WebView

* @Author GQ

*/

public class ProgressWebView extends WebView {

private ProgressBar progressbar;

private Context mContext;

public ProgressWebView(Context context, AttributeSet attrs) {

super(context, attrs);

this.mContext = context;

progressbar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal);

progressbar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 5, 0, 0));

Drawable drawable = context.getResources().getDrawable(R.drawable.view_progress_webview);

progressbar.setProgressDrawable(drawable);

addView(progressbar);

//主要处理解析,渲染网页等浏览器做的事情

setWebViewClient(new WebViewClient() {

@Override

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

super.onReceivedError(view, errorCode, description, failingUrl);

//加载失败时候,显示自定义的页面

if (errorListener != null) {

errorListener.onError();

}

}

});

//辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等

setWebChromeClient(new WebChromeClient());

getSettings().setSupportZoom(true);//是否可以缩放

getSettings().setBuiltInZoomControls(true);

getSettings().setJavaScriptEnabled(true);//支持JS

getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);

getSettings().setUseWideViewPort(true);

getSettings().setLoadWithOverviewMode(true);

getSettings().setSaveFormData(true);

getSettings().setDomStorageEnabled(true);

//优先使用缓存

getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

//禁用长按

setOnLongClickListener(new OnLongClickListener() {

@Override

public boolean onLongClick(View view) {

return true;

}

});

//如果在浏览器下载,调用浏览器默认下载+通知栏

setDownloadListener(new DownloadListener() {

@Override

public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {

Uri uri = Uri.parse(url);

Intent intent = new Intent(Intent.ACTION_VIEW, uri);

mContext.startActivity(intent);

}

});

}

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);

}

@Override

public void onReceivedTitle(WebView view, String title) {

super.onReceivedTitle(view, title);

if (titleListener != null)

titleListener.getTitle(title);

}

}

@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);

}

private TitleListener titleListener;

public interface TitleListener {

void getTitle(String title);

}

public void setOnTitleListener(TitleListener titleListener) {

this.titleListener = titleListener;

}

private ErrorListener errorListener;

public interface ErrorListener {

void onError();

}

public void setOnErrorListener(ErrorListener errorListener) {

this.errorListener = errorListener;

}

}

4. 使用

/**

* 公共WebView

*/

public class BasicWebActivity extends Activity {

protected ProgressWebView progressWebView;

private TextView title;//标题栏

private TextView tv_none;//加载失败显示文字

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.common_webview);

title = (TextView) findViewById(R.id.title);

tv_none = (TextView) findViewById(R.id.tv_none);

progressWebView = (ProgressWebView) findViewById(R.id.progressWebView);

String url = getIntent().getStringExtra("url");

progressWebView.setOnTitleListener(new ProgressWebView.TitleListener() {

@Override

public void getTitle(String title) {

title.setText(title);

}

});

progressWebView.setOnErrorListener(new ProgressWebView.ErrorListener() {

@Override

public void onError() {

tv_none.setText("url资源失效");

}

});

//加载网页

progressWebView.loadUrl(url);

}

//重写返回键

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {

if (progressWebView.canGoBack()) {

progressWebView.goBack();//返回上一层页面

return true;

} else {

finish();//关闭页面

}

}

return super.onKeyDown(keyCode, event);

}

}

其中common_webview就包含一个title一个progressWebView就不贴代码了。

如有疑问,请留言或者到本站社区交流讨论,本站关于Android开发的文章还有很多,还希望大家搜索参阅,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值