Android(安卓)WebView
16lz
2022-06-01
WebView
1、概念 WebView是Android种基于webkit内核浏览器渲染引擎的组件,它可以通过HTML显示方便地网页。
2、权限 WebView需要添加网络权限:
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 uploadFile) { uploadFile(uploadFile); }
@SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadFile, String acceptType) { uploadFile(uploadFile); }
@SuppressWarnings("unused") public void openFileChooser(ValueCallback uploadFile, String acceptType, String capture) { uploadFile(uploadFile); } });
/** 打开文件选择器 */ private void uploadFile(ValueCallback 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; } } } }
1、概念 WebView是Android种基于webkit内核浏览器渲染引擎的组件,它可以通过HTML显示方便地网页。
2、权限 WebView需要添加网络权限:
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
@SuppressWarnings("unused") public void openFileChooser(ValueCallback
@SuppressWarnings("unused") public void openFileChooser(ValueCallback
/** 打开文件选择器 */ private void uploadFile(ValueCallback
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; } } } }
更多相关文章
- [Android] AsyncTask使用实例---加载网络图片
- [Network]Android(安卓)N Ethernet新IP获取机制—IpManager
- Android中Java和JavaScript交互解决方案,以及问题解决大全
- android调用shell命令及权限问题
- Android(安卓)媒体库数据更新
- Android(安卓)phone在拨号盘输入*#06#的处理流程
- android 远程接口
- 关于android中Email未设置账户的情况下发送mailto异常
- Android(安卓)Studio安装后Gradle同步失败问题的有效解决方案