转载请标明出处:http://blog.csdn.net/jj583500596/article/details/68944984
WebView作为Android控件为Android App开发提供了新的方式,WebView加载Html页面可以作为App交互界面。由于Html页面开发具有及时性,可以用来实现一些App中经常因需求修改而改动的界面,不用因为经常修改而迭代版本。
getSettings() - 获取设置WebView的WebSettings对象。
setWebViewClient(WebViewClient client) - 设置将接收各种通知和请求的WebViewClient。
setWebChromeClient(WebChromeClient client) - 设置chrome处理。
setAllowFileAccess - 启用或禁用WebView访问文件数据
setBlockNetworkImage - 是否显示网络图像
setBuiltInZoomControls - 设置是否支持缩放
setFixedFontFamily - 设置固定使用的字体
setJavaScriptEnabled - 设置是否支持Javascript
setLayoutAlgorithm - 设置布局方式
setLightTouchEnabled - 设置用鼠标激活被选项
setSupportZoom - 设置是否支持变焦
setCacheMode - 设置缓冲的模式
setDefaultFontSize - 设置默认的字体大小
setDefaultTextEncodingName - 设置在解码时时候用的默认编码
onCloseWindow - 关闭WebView
onCreateWindow - 创建WebView
onProgressChanged - 加载进度条改变
onReceivedlcon - 网页图标更改
onReceivedTitle - 网页Title更改
onRequestFocus - WebView显示焦点
onJsAlert - 处理Javascript中的Alert对话框
onJsConfirm - 处理Javascript中的Confirm对话框
onJsPrompt - 处理Javascript中的Prompt对话框
doUpdateVisitedHistory - 更新历史记录
onFormResubmission - 应用程序重新请求网页数据
onPageStarted - 网页开始加载
onReceivedError - 报告错误信息
onScaleChanged - WebView发生改变
shouldOverrideUrlLoading - 控制新的连接在当前WebView中打开
onLoadResource - 加载指定地址提供的资源
onPageFinished - 网页加载完毕
因为WebView要加载网页,所以AndroidManifest.xml中必须添加联网权限,否则会出Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
WebView mWebView = new WebView(this);
// 启用WebView对JavaScript的支持
mWebView.getSettings().setJavaScriptEnabled(true);
// 触摸焦点起作用(如果不设置,则在点击网页文本输入框时,不能弹出软键盘及不响应其他的一些事件)
mWebView.requestFocus();
// 取消滚动条
mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
// 允许网页缩放
mWebView.getSettings().setSupportZoom(true);
// 把图片加载放在最后来加载渲染
mWebView.getSettings().setBlockNetworkImage(true);
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// 是否按下返回键,且WebView现在的层级,可以返回
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
// 返回WebView的上一页面
mWebView.goBack();
return true;
}
return false;
}
mWebView.setWebViewClient(new WebViewClient() {
/**
* WebView加载url完成时,会回调此api,可在这个api中隐藏加载进度框
*/
@Override
public void onPageFinished(WebView view, String url) {
// 此处可添加一些逻辑:隐藏加载进度框
progressbar.setVisibility(GONE);
}
/**
* WebView开始加载url时,会回调此api,可在这个api中显示加载进度框
*/
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// 此处可添加一些逻辑:显示加载进度框
progressbar.setVisibility(VISIBLE);
}
});
mWebView.setWebChromeClient(new 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);
}
});
progressbar.xml样式设置:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" >
<shape>
<corners android:radius="5dp" />
<gradient android:startColor="#ffffff"
android:endColor="#ffffff" />
shape>
item>
<item android:id="@android:id/progress" >
<clip>
<shape>
<corners android:radius="5dp" />
<gradient android:startColor="#0000ff"
android:endColor="#0000ff" />
shape>
clip>
item>
layer-list>
引用progressbar.xml
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
android:id="@+id/myProgressBar"
android:layout_width="match_parent"
android:layout_height="5px"
android:progressDrawable="@drawable/progressbar_webview"
/>
加载网络URL地址:
// 加载网络的url地址
mWebView.loadUrl("https://www.baidu.com/");
加载本地URL地址:(本地文件存放在:assets文件中)
// 加载本地的url地址
mWebView.loadUrl("file:///android_asset/test.html");