WebView用途
通过Intent调用系统浏览器:
引言:
Uri uri = Uri.parse(url);//url为你要链接的地址
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
将WebView加入你的应用:
只需在活动布局中加入<WebView>元素即可
<WebView
android:id="..."
... >
</WebView>
要在WebView加载页面,使用loadUrl()
//使页面获得焦点
webView.requestFocus();
在它有效工作之前,你要保证你的应用能访问网络。要访问网络,需要在你的配置文件中获取INTERNET权限。
<uses-permission android:name="android.permission.INTERNET"/>
处理页面导航:
当用户点击一个WebView中的页面的链接时,通常,是由默认的浏览器打开并加载目标URL的。然而,你可以在WebView中覆盖这一行为,那么链接就会在WebView中打开。
webView.setWebViewClient( new WebViewClient() );
在WebView中使用Javascript
如果你想要加载在WebView中的web页面使用Javascript,你需要在WebView中启动Javascript。启动Javascript你可以通过WebView中带有的WebSetting来启用它。你可以通过getSettings()来获取WebSettings的值,然后通过setJavaScriptEnabled() 来启用Javascript。
WebView webView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
后退与前进:
当你的WebView覆盖了URL加载,它会自动生成历史访问记录,你可以通过goBack()或goForward()向前或向后访问已访问过的站点。
@Override
public boolean onKeyDown( int keyCode, keyEvent event){
if(keyCode == keyEvent.KEYCODE_BACK)&&myWebView.canGoBack(){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode,event);
}
判断页面的加载过程;
由于有些页面可能加载缓慢,所以我们需要去判断页面的加载过程,制作进度条给予用户良好的体验效果。
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
//页面加载完毕,关闭
}else {
//页面正在加载
}
});
WebView缓存的运用:
优先使用缓存:
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
不使用缓存:
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
public class MainActivity extends Activity { private String url = "http://2016.qq.com"; private WebView webView; private ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Uri uri = Uri.parse(url); // Intent intent = new Intent(Intent.ACTION_VIEW,uri); // startActivity(intent); init(); } private void init() { // TODO Auto-generated method stub webView = (WebView) findViewById(R.id.webView); // webView.loadUrl("file:///android_asset/baidu.html");//加载一个资源文件(本地文件) //加载外部资源 webView.loadUrl("url"); //覆盖WebView默认通过第三方或者是系统浏览器打开网页的行为,使得网页可以在webview中打开 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub //返回值是true的时候控制网页在WebView中去打开,如果为false调用系统浏览器或第三方浏览器去打开 view.loadUrl(url); return true; } //webviewClient帮助WebView去处理一些页面控制和请求通知 }); //启用支持Javascipt WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); //优先使用缓存加载 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { // TODO Auto-generated method stub //newProgress 1-100之间的整数 if (newProgress == 100) { //页面加载完毕,关闭 closeDialog(); }else { //页面正在加载 openDialog(newProgress); } super.onProgressChanged(view, newProgress); } private void openDialog(int newProgress) { // TODO Auto-generated method stub if(dialog == null){ dialog = new ProgressDialog(MainActivity.this); dialog.setTitle("on time"); dialog.setProgress(ProgressDialog.STYLE_HORIZONTAL); dialog.setProgress(newProgress); dialog.show(); }else{ dialog.setProgress(newProgress); } } private void closeDialog() { // TODO Auto-generated method stub if (dialog != null && dialog.isShowing()) { dialog.dismiss(); dialog=null; } } }); } //改写物理按键——返回的逻辑 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode==KeyEvent.KEYCODE_BACK){ if(webView.canGoBack()){ webView.goBack();//返回上一页面 return true; }else { System.exit(0);//退出程序 } } return super.onKeyDown(keyCode, event); } }
总结如下:
webview组件如何使用
1) 添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2) 在要Activity中生成一个WebView组件:WebView webView = new WebView(this);或者可以在activity的layout文件里添加webview控件:
3) 设置WebView基本信息:
如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
触摸焦点起作用
requestFocus();
取消滚动条
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);