Android WebView

WebView
WebView本身是一个View,以WebKit为引擎核心,来实现一些基本的浏览器功能。
基本使用
1 | <WebView |
1 | // 显示外部网页 |
注意
- WebView本身是一个View,需要findViewById()。
- 权限;
<uses-permission android:name="android.permission.INTERNET" /> - 当其他程序接收到意图会启动,使用
webView.setWebViewClient(new WebViewClient());来拦截。 - 重写onKeyDown()方法,实现回退效果;
1 |
|
WebSettings
常用设置
设置一些浏览器的属性
1 | WebSettings webSettings=webView.getSettings(); |
示例
1 | WebSettings webSettings=webView.getSettings(); |
WebViewClient
帮助WebView处理各种通知,请求事件。
webView.webViewClient = WebViewClient() 的作用是,当需要从一个网页跳转到另一个网页时,希望目标网页仍然在当前 WebView 中显示,而不是打开系统浏览器。
常用方法
1 | // Kotlin 写法 |
示例
1 | webView.setWebViewClient(new WebViewClient(){ |
WebChromeClient
帮助WebView处理JS的对话框,网站图标,网站title,加载进度等。
常用方法
1 | webView.setWebChromeClient(new WebChromeClient(){ |
示例
1 | webView.setWebChromeClient(new WebChromeClient(){ |
其它
1 | // WebView 组件在 Java 中 需要 findViewById,在 Kotlin 中因为插件可直接使用。 |
使用的是 AS 的模拟器,网页加载不出来,webView 报 net::ERR_NAME_NOT_RESOLVER。
无网络或本地没有缓存等情况下才会出现这个,一般来讲,是因为模拟器默认的 DNS 和电脑的不一致。
指定 DNS 来启动模拟器:(我是用来解决模拟器无网络问题,模拟器默认的 DNS 和电脑的值不一致。)
cd 到指定目录:cd /Users/jianghouren/Library/Android/sdk/emulator
输入命令:./emulator -avd Pixel_API_29 -dns-server 192.168.1.1(可通过网络偏好设置的高级设置里查看 DNS 值,可通过用户名/.android/avd 查看模拟器名称)