美文网首页
Android WebView 基础

Android WebView 基础

作者: 我是君莫笑 | 来源:发表于2018-03-25 00:06 被阅读0次

描述

WebView是Android系统中内置了的一款高性能webkit内核浏览器,在SDK中封装为一个叫做WebView组件。

用途

应用内嵌浏览器,并显示网页内容。
android 自带的 textview 不支持长按文本复制,webview 自带长按复制文本内容的功能。
应用在内容显示上,对动画的丰富性要求较高,可以使用 webview 加载支持javascript的网页显示动画内容。

所需应用权限

AndroidManifest.xml 需要添加 "android.permission.INTERNET"权限。

开发相关

XML文件中显示webview组件。

<WebView
 android:id="@+id/webView"
 android:layout_width="match_parent"
 android:layout_height="match_parent"/>

加载内容

webView.loadUrl(url);
webView.loadUrl(url, extraHeaders);
webView.loadData(data, mimeType, encoding);
webView.loadDataWithBaseURL(baseUrl, data, mimeType, encoding, historyUrl);

设置属性

WebSettings setting = webView.getSettings();
setting.setSupportZoom(true);//支持缩放
setting.setTextSize(TextSize);//页面中字体大小 --TextSize.LARGER
setting.setJavaScriptEnabled(true);//对javascript的支持

webview显示网页的前进与后退

webView.canGoBack();
webView.goBack(); //后退
webView.canGoForward();
webView.goForward(); //前进

//ps:使用webview浏览网页,点击系统“Back”键会finish()activity,因此
//需要拦截返回键的监听
public boolean onKeyDown(int keyCode, KeyEvent event) {       
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {       
            webView.goBack();       
                   return true;       
        }       
        return super.onKeyDown(keyCode, event);       
    }

当网页中有链接时,如果希望不点击链接继续在当前webview里面显示内容,而不是打开系统浏览器或者第三方浏览器,需要设置WebViewClient属性。

webView.setWebViewClient(new WebViewClient(){       
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {       
                        view.loadUrl(url);       
                        return true;       
                    }       
        });

监听页面中javascript中的简单事件

//demo.html
<html>       
  <mce:script language="javascript"><!--     
       
      function wave() {       
          document.getElementById("droid").src="android_waving.png";       
      }       
             
</mce:script>       
      <body>       
      <a onClick="window.demo.clickOnAndroid()">       
          <img id="droid" src="android_normal.png" mce_src="android_normal.png"/><br>       
              Click me!       
      </a>       
      </body>       
</html> 

//android代码
public class WebViewDemo extends Activity {        
    private WebView mWebView;       
    private Handler mHandler = new Handler();       
       
    public void onCreate(Bundle icicle) {       
        super.onCreate(icicle);       
        setContentView(R.layout.webviewdemo);       
        mWebView = (WebView) findViewById(R.id.webview);       
        WebSettings webSettings = mWebView.getSettings();       
        webSettings.setJavaScriptEnabled(true);       
        mWebView.addJavascriptInterface(new Object() {       
            public void clickOnAndroid() {//html中的方法       
                mHandler.post(new Runnable() {       
                    public void run() {       
                        mWebView.loadUrl("javascript:wave()");       
                    }       
                });       
            }       
        }, "demo");       
        mWebView.loadUrl("file:///android_asset/demo.html");       
    }       
}

1、为了让WebView从apk文件中加载assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"
2、addJavascriptInterface方法中要绑定的Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用 Handler的目的。

对html5视频播放及全屏的支持,需要自定义WebChromeClient,重写onShowCustomView(),和onHideCustomView()方法。

相关文章

网友评论

      本文标题:Android WebView 基础

      本文链接:https://www.haomeiwen.com/subject/tsnccftx.html