As we know ,Android中的WebView控件令人蛋疼的东西(相比IOS的UIWebView/WKWebView,在多方面都令人感到力不从心。)
First of all, 献上一篇较为完整的WebView基础使用教程:
http://tutorials.jenkov.com/android/android-web-apps-using-android-webview.html#loaing-a-url-into-the-webview
基础篇
- 1.基本配置WebSettings
1 | WebSettings webSettings = mWebView .getSettings(); |
- 2.加载URL/HTML代码块
1 | //加载Url |
- 3.WebViewClient
设置setWebChromeClient后,页面能够在当前App中打开,而不是调用系统的浏览器。
1 | webView.setWebChromeClient(new MyWebChromeClient()); |
- 4.WebViewClient方法简述:
1 | private class MyWebViewClient extends WebViewClient { |
- 5.共享App的Cookie到WebView中去
1 | CookieSyncManager.createInstance(context); |
Cookie头由客户端发送,包含在HTTP请求的头部中。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。
中级篇
1.关于主动获取点击事件
处理WebView的点击响应,最直接方便的方式就是js交互了。但这里我们聊聊其他的方式 😂。
①首先是(单击)WebView中图片:
1 | webView.setOnTouchListener(new View.OnTouchListener() { |
这里通过Touch监听坐标位置和WebView.HitTestResult来共同判断,用户对图片进行了单击。
② 长按 WebView中的图片
根据上面的单击处理方式,相信大家也能高仿出一个long click 事件来,所以我们继续换一种方式 😫(容我再做一个悲伤的表情先)。
registerForContextMenu(mWebView)的方式:
1.首先WebView先进行上下文的注册:
1
registerForContextMenu(webView);
2.重写 onCreateContextMenu() 方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
final WebView.HitTestResult result = ((WebView) v).getHitTestResult();
MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
// todo menu 点击事件
/**
switch (item.getItemId()) {
case 0:
//todo 保存图片
break;
case 1:
//todo 看大图
break;
}
*/
return true;
}
};
if (result.getType() == WebView.HitTestResult.IMAGE_TYPE ||
result.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) {
//menu.add(0, 0, Menu.NONE, "保存图片").setOnMenuItemClickListener(handler);
//menu.add(0, 1, Menu.NONE, "看大图").setOnMenuItemClickListener(handler);
}
}3.反注册:
1
2页面销毁处,解除注册
unregisterForContextMenu(webView);
2.关于WebView的视频播放
3.关于WebView的缓存
4.关于WebView的背景透明
Android4.0环境下WebView背景默认为白色。要设置成透明按如下步骤:
1.在AndroidManifest.xml 文件里application设置
android:hardwareAccelerated="false"
2.loadUrl/loadData后
webView.setBackgroundColor(0)
3.确认WebView的父层布局,背景也为透明。
4.关于WebView的扩展
- Chrome Custom Tabs
https://developer.chrome.com/multidevice/android/customtabs