Android Training学习笔记——WebView
来源:互联网 发布:廖雪峰python教程 编辑:程序博客网 时间:2024/04/26 11:00
转载请注明出处:http://blog.csdn.net/xroocky/article/details/50876476
WebView
继承于View
,它允许我们在一个Activity
中的一部分展示一个Web页面
向App添加WebView
在
Layout
文件中添加如下代码:<?xml version="1.0" encoding="utf-8"?><WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" />
使用
loadUrl()
去加载一个Web页面WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadUrl("http://www.example.com");
使用
loadData()
去加载html
的字符串WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.loadData(data, "text/html", "utf-8");
根据安卓的API文档的话应该这样写,但是实际效果是中文会出现乱码,解决办法有如下两种:
改变参数:
myWebView.loadData(data, "text/html; charset=utf-8", null);
更换方法:
myWebView.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);
当然还要为App提供访问网络的权限
<manifest ... ><uses-permission android:name="android.permission.INTERNET" />...</manifest>
在WebView中使用JavaScript
如果希望使用JavaScript
必须要为WebView
开启JavaScript
。如果JavaScript
被开启了,我们就可以在App代码和JavaScript
代码之间创建接口
开启
JavaScript
在
WebView
中,JavaScript是默认关闭的,我们需要在WebSettings
中打开JavaScript
,WebSettings
还为我们提供了一些其他的有用方法,例如setUserAgentString()
,可以让我们自己设置用户代理WebView myWebView = (WebView) findViewById(R.id.webview);WebSettings webSettings = myWebView.getSettings();webSettings.setJavaScriptEnabled(true);
给Android代码绑定
JavaScript
代码
我们需要调用WebView
的addJavascriptInterface()
方法来进行绑定,对于该方法要为其传递一个接口的实例和一个字符串作为参数。
创建如下的class:public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** Show a toast from the web page */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); }}
如果
targetSdkVersion
是17或者更高,需要在那些希望在JavaScript
中调用的方法前面加上@JavascriptInterface
,而且这些方法必须是公共的。
绑定过程如下,接口被命名为“Android“:WebView webView = (WebView) findViewById(R.id.webview);webView.addJavascriptInterface(new WebAppInterface(this), "Android");
这时就可以在
JavaScript
代码中调用WebAPPInterface
中的方法(并不需要在JavaScript
中初始化WebAPPInterface
,WebView
会自动完成这一切):<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" /><script type="text/javascript"> function showAndroidToast(toast) { Android.showToast(toast); }</script>
处理页面导航……
当用户在WebView
中点击链接后,默认是启动浏览器去访问相应的URL
,然而我们可以修改这个默认行为,让用户在我们的WebView
中查看相应的跳转URL
。为WebView
提供一个WebViewClient
就可以实现这个效果:
WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.setWebViewClient(new WebViewClient());
如果希望得到对相应跳转URL
更多的控制,我们可以继承WebViewClient
来创建自己的WebViewClient
,例如:
private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals("www.example.com")) { // This is my web site, so do not override; let my WebView load the page return false; } // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; }}
然后进行设置:
WebView myWebView = (WebView) findViewById(R.id.webview);myWebView.setWebViewClient(new MyWebViewClient());
浏览历史
如果我们重写了URL Loading
的话,浏览历史就会被自动记录下来,我们可以使用goBack()
和goForward()
方法来实现前进和后退
@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { // Check if the key event was the Back button and if there's history if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); return true; } // If it wasn't the Back key or there's no web page history, bubble up to the default // system behavior (probably exit the activity) return super.onKeyDown(keyCode, event);}
canGoBack()
方法是用来判断是否还有历史记录可以供使用者访问的,同样还有canGoForward()
方法。
- Android Training学习笔记——WebView
- Android Training学习笔记——Navigation
- Android Training学习笔记
- Android学习笔记之——WebView
- android学习笔记——webView
- Android Training学习笔记——App Bar
- Android Training学习笔记——RecyclerView和CardView
- Android training课程学习笔记...
- Android WebView学习笔记
- Android WebView学习笔记
- android webview 学习笔记
- android 学习笔记3——WebView的使用
- Android笔记——WebView
- android学习笔记之WebView
- Android开发学习笔记WebView
- Android Training学习笔记之开始篇
- Android官方Training学习——Multimedia多媒体
- Android学习笔记——webview 适配相关(不定期更贴填坑)
- STL学习之函数对象
- repo 签出某个Android版本
- ios-基础之【6】-NSString
- Runaround Numbers--模拟
- SVN版本控制(二)--SVN客户端的使用
- Android Training学习笔记——WebView
- Java多线程:线程状态
- JavaScript创建变量语法
- 处理异常总结
- 面向对象的工具
- 排队看病问题(优先队列数组)(1873)
- 关于PHP
- Intent 小结
- http协议状态码总结