WebView 使用基础(持续更新)
WebView 是Android继承了View的组件,基于开源的WEBKIT内核,相当于一个简单的浏览器实现。
提供了一下方法:
goBack():后退(基于加载URL链接,通过canGoBack判断是否可以回退,若是直接loadDataWithBaseURL则无效)
goForward():前进
loadUrl(String Url):加载指定URL对应网页
zoomIn():放大网页
zoomOut():缩小网页
loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String historyUrl):loadData增强版,对应参数解释:
data:指定加载的HTML代码
mimeType:指定HTML代码的MIME类型,对应HTML代码可指定为text/html
encoding:指定HTML编码所用的字符集,如GBK,UTF-8
附记:
(1)最近做项目遇到需要对webview中链接点击进行监听:
以下是从http://www.cnblogs.com/mengdd/archive/2013/03/01/2938295.html了解到的资料
要打开用户点击的链接,只需要用setWebViewClient()方法向你的WebView提供一个WebViewClient
比如:
WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new WebViewClient());
关于打开链接位置的更多控制
如果你对在哪里打开链接需要更多的控制,你可以创建自己的类,继承 WebViewClient
,然后覆写shouldOverrideUrlLoading()
方法。
比如下面这个:
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打开,其他链接用浏览器(intent启动了默认的处理URL的Activity)。
定义完之后把这个类的对象传入setWebViewClient()方法即可。
WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.setWebViewClient(new MyWebViewClient());
在我的项目中使用如下:
health_info_main.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(final WebView view, String url) { view.loadUrl(url); turn_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handler.sendEmptyMessage(0x1134); } }); return true; } });
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
health_info_main.loadDataWithBaseURL(null,
getHtmls(htmls),
"text/html",
"UTF-8",
null);
// health_info_main.goBack();
turn_back.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
System.gc();
}
});
}
};
(2)loadUrl()方法乱码问题
webView.getSettings().setDefaultTextEncodingName("gbk");
参考自:http://blog.csdn.net/windzou36/article/details/7299926
(3)webview按后退键历史后退与关闭页面
webView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction()==KeyEvent.ACTION_DOWN){ if (keyCode==KeyEvent.KEYCODE_BACK){ if (webView.canGoBack()){ webView.goBack(); }else { finish(); } return true; } } return false; } });