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;
            }
        });

 

posted @ 2016-01-25 00:58  戎码之路  阅读(171)  评论(0)    收藏  举报