访问权限
调用第三方或者系统默认浏览器不需要使用网络访问权限,但是自己写WebView访问网络资源需要配置网络访问权限。
1
| <uses-permission android:name="android.permission.INTERNET"/>
|
使用loadUrl()
web资源: webView.loadUrl(“http://www.bing.com");
本地文件:webView.loadUrl(“file:///android_asset/xx.html”);
本地文件放在 asset文件夹中
//使页面获得焦点
webView.requestFocus();
处理页面导航
当用户点击webView中的链接时,通常由默认浏览器打开并加载目标url,需要覆盖该默认处理方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; }
@Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); }
@Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } });
|
WebView使用Javascript
1 2
| WebSettings settings=webView.getSettings(); settings.setJavaScriptEnabled(true);
|
设置返回键逻辑
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ if(webView.canGoBack()){ Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show(); webView.goBack(); return true; } }else{ System.exit(0); } return super.onKeyDown(keyCode, event); }
|
判断加载页面过程
使用本地缓存
1
| WebSettings settings=webView.getSettings(); settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
|
实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="0dp" android:paddingRight="0dp" >
<ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_alignParentTop="true" android:layout_width="match_parent" android:layout_height="wrap_content" />
<WebView android:id="@+id/webView" android:layout_below="@id/progressBar" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentEnd="true"></WebView> </RelativeLayout>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { progressCompleted(); } else { progressUnCompleted(newProgress); } }
private void progressCompleted(){ progressBar.setProgress(100); }
private void progressUnCompleted(int newProgress){ progressBar.setProgress(newProgress); } });
|
