1.引言:通过Intent调用系统浏览器
[java] view plain copy Uri uri = Uri.parse(url); //url为你要链接的地址 Intent intent = new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); 2.步骤(1).活动布局中加入<WebView>元素即可
[html] view plain copy <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="wrap_content"> </WebView> (2).使用WebVIew加载页面 WebView 主要调用三个方法:LoadUrl、LoadData、LoadDataWithBaseURL。 LoadUrl 直接加载网页、图片并显示。(本地或是网络上的网页、图片、gif)LoadData 显示文字与图片内容 (模拟器1.5、1.6)LoadDataWithBase 显示文字与图片内容(支持多个模拟器版本)我们在这里使用loadUrl()
web资源:webView.loadUrl("http://www.baidu.com");
本地文件:webView.loadUrl("file:///android_asset/XXX.html");
本地文件存放在:assets文件夹中。assets文件夹中可以放置html、js、css、image等资源。eclipse中assets文件夹 在 project/下面,并且已经自动生成,但是 Android studio 中 需要放置 assets 到 project/app/src/main 下面,需要自己创建。
对于assets文件夹下资源的引用,可以通过例如 file:///android_asset/images/XXX.jpg 的形式来引用。
(3).获取网络访问权限
[html] view plain copy <manifest ...> <uses-permission android:name="android.permission.INTERNET"/> </manifest> (4).在WebView中使用Javascript [java] view plain copy //启用支持Javascript WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); (5)处理页面导航当用户点击一个WebView中的页面的链接时,通常,是由默认的浏览器打开并加载目标URL的。然而,你可以在WebView中覆盖这一行为,那么链接就会在WebView中打开
[java] view plain copy webView.setWebChromeClient(new WebChromeClient() (6)后退与前进 [java] view plain copy //改写物理按键——返回的逻辑 @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); }(7)判断页面加载过程
[java] view plain copy //页面加载 webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { //newProgress 1-100之间的整数 if (newProgress == 100) { //页面加载完成,关闭ProgressDialog closeDialog(); } 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.setCancelable(true); dialog.show(); } else { dialog.setProgress(newProgress); } } private void closeDialog() { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); dialog = null; } } });(8)WebView缓存的运用
[java] view plain copy //WebView加载页面优先使用缓存加载 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 源代码 [java] view plain copy import android.app.ProgressDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import java.io.BufferedReader; import java.io.InputStreamReader; public class MainActivity extends AppCompatActivity { private WebView webView; private ProgressDialog dialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { webView = (WebView) findViewById(R.id.webView); //WebView加载本地资源 // webView.loadUrl("file:///android_asset/example.html"); //WebView加载web资源 webView.loadUrl("http://www.baidu.com"); //覆盖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加载页面优先使用缓存加载 settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //页面加载 webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { //newProgress 1-100之间的整数 if (newProgress == 100) { //页面加载完成,关闭ProgressDialog closeDialog(); } 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.setCancelable(true); dialog.show(); } else { dialog.setProgress(newProgress); } } private void closeDialog() { 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); } }