xml文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.webviewdemo1.MainActivity" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
源代码:
package com.example.webviewdemo1; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { private String url="http://www.meizu.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);//URL为要链接的地址 Intent intent = new Intent(Intent.ACTION_VIEW,uri);//创建一个意图,将地址传入 startActivity(intent);//开启活动 */ //!!!注意:一定要自定义网络权限,不然不能联网
// <uses-permission android:name="android.permission.INTERNET"/>
init(); } private void init() { webView = (WebView) findViewById(R.id.webView); //webView加载本地资源 //webView.loadUrl("file:///webViewDemo1//assets//example.html"); //webView加载web资源 webView.loadUrl(url); //覆盖webView默认通过第三方浏览器或者是默认浏览器打开网页的行为,使得网页可以在webView中打开 webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //返回值为true时控制网页在webView中打开,如果为false则是调用系统浏览器或者第三方浏览器去打开 view.loadUrl(url); return true; } //webViewClient帮助webView去处理一些页面控制和请求通知 }); //启用支持javaScript WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); //提高速度 //webView加载页面优先使用缓存加载,默认不使用缓存加载 webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { //newProgress 1-100之间的整数 if(newProgress==100){ //网页加载完毕,关闭ProgressDialog closeProgress(); }else{ //网页开始加载,打开ProgressDialog openDialog(newProgress); } } private void openDialog(int newProgress) { if(dialog==null){ dialog = new ProgressDialog(MainActivity.this); dialog.setTitle("正在加载"); dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); dialog.setProgress(newProgress); dialog.show(); }else{ dialog.setProgress(newProgress); } } private void closeProgress() { if(dialog!=null&&dialog.isShowing()){ dialog.dismiss(); dialog=null; } } }); } //改写物理按键 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ if(webView.canGoBack()){ webView.goBack();//返回上一页面 return true; }else{ System.exit(0);//退出程序 } } return super.onKeyDown(keyCode, event); } }
webView的一些其他配置:
/** * 初始化webView的设置 */ private void initWebView() { WebSettings settings = wv.getSettings(); /** * //WebView缓存的运用,可以加快网页加载的速度.缓存模式: Android的WebView有五种缓存模式 1.LOAD_CACHE_ONLY //不使用网络,只读取本地缓存数据 2.LOAD_DEFAULT //根据cache-control决定是否从网络上取数据。 3.LOAD_CACHE_NORMAL //API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式 4.LOAD_NO_CACHE //不使用缓存,只从网络获取数据 5.LOAD_CACHE_ELSE_NETWORK //只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据 */ settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//优先使用缓存 //webViewClient帮助WebView去处理一些界面控制和请求的通知 //启用支持javaScript(脚本语言) settings.setJavaScriptEnabled(true); settings.setPluginState(WebSettings.PluginState.ON); //解决无法根据浏览器居中显示内容的问题 settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); //加了下面这句就能访问网络了,没加之前报:TypeError: Cannot call method 'getItem' of null at settings.setDomStorageEnabled(true);//使用Dom的本地存储机制,但是加了返回有点小bug,所以能不加就不加吧 wv.setVisibility(View.VISIBLE); wv.setWebChromeClient(new WebChromeClient()); //加了才能播放视频 }
// webView.getSettings().setJavaScriptEnabled(true); // webView.getSettings().setDisplayZoomControls(true);// 设置显示缩放按钮 // webView.getSettings().setSupportZoom(true); // 支持缩放 // webView.getSettings().setBuiltInZoomControls(true); //方法一: // webView.getSettings().setUseWideViewPort(true);//让webview读取网页设置的viewport,pc版网页 // webView.getSettings().setLoadWithOverviewMode(true); //方法二: webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);//适应内容大小 // webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);//适应屏幕,内容将自动缩放
webView.getSettings().setBuiltInZoomControls(true);//可以缩放,但是会显示缩放的按钮 webView.getSettings().setDisplayZoomControls(false);//隐藏缩放的按钮
webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//把所有内容放大webview等宽的一列中 //设置标题 WebChromeClient wvcc = new WebChromeClient() { @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); if(TextUtils.isEmpty(title)){ title = "默认标题"; } setThisTitle(title); } }; // 设置setWebChromeClient对象 webView.setWebChromeClient(wvcc);