WebView
1、概念
WebView是Android种基于webkit内核浏览器渲染引擎的组件,它可以通过HTML显示方便地网页。
2、权限
WebView需要添加网络权限:<uses-permission android:name="android.permission.INTERNET" />
3、属性
1)想和Js进行交互?那么加上
mWebView.getSettings().setJavaScriptEnabled(true);
2)想让WebView适应屏幕大小?那么加上
mWebView.getSettings().setUseWideViewPort(true);
mWebView.getSettings().setLoadWithOverviewMode(true);
3)WebView不支持缩放?那么加上
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.getSettings().setSupportZoom(true);
4)WebView显示乱码?重新设置一下编码吧!
mWebView.getSettings().setDefaultTextEncodingName("UTF-8");
5)WebView显示空白?开启或关闭硬件加速试一下吧,你会有惊喜的!
mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); // 加上关闭,默认开启
6)WebView不显示网络图片?阻碍了吧,放开吧!
mWebView.getSettings().setBlockNetworkImage(false); // true是锁定哦
7)WebView打不开窗口?那么打开 试一试!
mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
常用的属性就是这些啦,如果需要一些偏僻的,那就爱莫能助咯!
4、WebViewClient
WebViewClient处理各种通知,请求事件。
wv.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 如果你想打开的页面在webview中,不要犹豫了,copy吧!
view.loadUrl(url);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// 只要页面开始加载,我都监视的到
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
// 略坑,到了这里还真不一定加载结束呢!
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// TODO Auto-generated method stub
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
5、WebChromeClient
处理各种对话框,加载进度,网站标题等。
wv.setWebChromeClient(new WebChromeClient() {
@Override
public void onCloseWindow(WebView window) {
// TODO Auto-generated method stub
super.onCloseWindow(window);
}
@Override
public boolean onCreateWindow(WebView view, boolean dialog,
boolean userGesture, Message resultMsg) {
// 创建WebVIew时,走这里
return super.onCreateWindow(view, dialog, userGesture,
resultMsg);
}
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
// 定制自己的修改对话框
return super.onJsAlert(view, url, message, result);
}
@Override
public boolean onJsConfirm(WebView view, String url,
String message, JsResult result) {
// 定制自己的确定对话框
return super.onJsConfirm(view, url, message, result);
}
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
// 定制自己的提示对话框
return super.onJsPrompt(view, url, message, defaultValue,
result);
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
// 这里可以知道页面加载了多少哦!
super.onProgressChanged(view, newProgress);
}
});
=================== WebView与Js交互 ====================
一、Js调用Android
1) 添加调用接口 webview.addJavascriptInterface(new AndroidAPI(this), "Instance");
2)添加调用类 AndroidAPI,Js可以调用AndroidAPI中的任意方法
public class AndroidAPI {
private Context c;
public AndroidAPI(Context c) {
this.c = c;
}
public void Android_Method1() {
Toast.makeText(c, "AndroidMethod1", Toast.LENGTH_SHORT).show();
}
public String Android_Method2() {
return "Android_Method2";
}
}
二、Android调用Js
1) 无参调用 webview.loadUrl("javascript:Js_Method()");
2)带参调用 webview.loadUrl("javascript:Js_Method(" + " 'Hello' " + ")");
三、Js通过Android打开文件选择器,Android将文件发送到Js
1) 在WebChromeClient中添加openFileChooser实现(openFileChooser为隐藏方法,不可用重写的方式,3个代表不同版 本的打开方式)
mWebView.setWebChromeClient(new WebChromeClient() {
@SuppressWarnings("unused")
public void openFileChooser(ValueCallback<Uri> uploadFile) {
uploadFile(uploadFile);
}
@SuppressWarnings("unused")
public void openFileChooser(ValueCallback<Uri> uploadFile,
String acceptType) {
uploadFile(uploadFile);
}
@SuppressWarnings("unused")
public void openFileChooser(ValueCallback<Uri> uploadFile,
String acceptType, String capture) {
uploadFile(uploadFile);
}
});
/** 打开文件选择器 */
private void uploadFile(ValueCallback<Uri> uploadFile) {
mUploadMessage = uploadFile;
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(Intent.createChooser(i, "File Chooser"),
FILE_CHOOSER_CODE);
}
2)在OnActivityResult中接收选择文件,并返回给Js
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FILE_CHOOSER_CODE) {
if (mUploadMessage == null)
return;
if (data != null && resultCode == RESULT_OK) {
Uri result = data.getData();
if (result != null) {
mUploadMessage.onReceiveValue(result);
mUploadMessage = null;
}
}
}
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章