Android WebView 基础
2018-03-25 本文已影响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()方法。