我在 Android Studio 从零开始使用 WebView 开发过程中遇到的几个坑
- Android Studio 编辑器
- Cannot resolve symbol 'XX'
- 如何插入一个与res同级的资源文件夹
- Webview 相关
- 代码写完打不开页面
- 页面打开无法调用JS
- 页面内报err_cleartext_not_permitted错误
- 页面打开时自动唤起自带浏览器
- 页面打开后报err_unknow_url_scheme错误
我所谓的从零开始,是指完全没有Android开发经验,甚至连Java都不会的从零开始,完全通过从网上查找资料,一步一摸索,下面是我在开发过程中遇到的几个问题,整理了一下。
Android Studio 编辑器
Android Studio
是由Google
推出的一个工具包一样的玩意,全英文界面,粗略扫了一眼settings
没发现改language
的地方,反正我看着也能用,也就没有去找什么汉化包。
下面进入正题:
Cannot resolve symbol ‘XX’
这个问题真是一个很沙雕的问题了,因为没有Java
的知识(有一点其他语言的知识),我一度以为是什么包啊库啊之类的引用问题,查资料说:
“File” -> “Invalidate Caches / Restart”,然后点击对话框中的 “Invalidate and Restart”
那我自然就去试试了,结果屁用没有,仍旧标红,然后,很神奇地,发现把光标点到那个标红的代码上面然后alt + enter,他就好了。
如何插入一个与res同级的资源文件夹
将界面左上角的Android
更改为Project
后在app->src->main
上右键New->Folder->Assets Folder
即可添加
Webview 相关
WebView
是一个基于webkit
引擎、展现web
页面的控件,Android
的WebView
在低版本和高版本采用了不同的webkit
版本内核,4.4后直接使用了Chrome
。
下面再次进入正题
代码写完打不开页面
在AndroidManifest.xml
里与<application>
同级处添加
<uses-permission android:name="android.permission.INTERNET" />
页面打开无法调用JS
在.java
文件中添加
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
页面内报err_cleartext_not_permitted错误
在AndroidManifest.xml
内<application>
属性上添加
android:usesCleartextTraffic="true"
页面打开时自动唤起自带浏览器
创建一个WebView Client
,在.java
文件中添加
myWebView.setWebViewClient(new WebViewClient(){
view.loadUrl(url);
return true;
}
});
页面打开后报err_unknow_url_scheme错误
WebView
只能识别http
以及https
请求,对其他平台的唤起链接如weixin://
、alipays://
等无法响应
可通过重写shouldOverrideUrlLoading()
方法解决
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url == null) return false;
try {
if(url.startsWith("weixin://") //微信
|| url.startsWith("alipays://") //支付宝
|| url.startsWith("mailto://") //邮件
|| url.startsWith("tel://")//电话
|| url.startsWith("dianping://")//大众点评
//其他自定义的scheme
) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
} catch (Exception e) { //防止crash
return true;//返回true,表示拦截自定义链接,但不跳转,避免弹出错误页面
}
view.loadUrl(url);
return true;
}