7-1 WebView概述
构建WebView就可以展示Web数据。
通过Intent调用系统浏览器
Uri uri=Uri.parse(url);//url为你要链接的地址
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
MainActivty.java package com.example.android2_webview; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; public class MainActivity extends Activity { private String url="http://baidu.com"; @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); } }
直接到浏览器上打开网址
7-2 使用WebView显示网页(一)
1.在布局文件添加WebView控件
2.使用WebView加载页面
要在WebView加载页面,使用loadUrl()
web资源:webView.loadUrl("http://www.baidu.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html");
本地文件存放在:assets文件中
//使页面获得焦点
webView.requestFocus();
3.获取网络访问权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
package com.example.android2_webview; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.webkit.WebView; public class MainActivity extends Activity { private String url = "http://baidu.com"; private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { // TODO Auto-generated method stub webView=(WebView)findViewById(R.id.webView); webView.loadUrl("file:///android_asset/example.html"); } }
Activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
7-3 使用WebView显示网页(二)
package com.example.android2_webview; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { private String url = "http://baidu.com"; private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { // TODO Auto-generated method stub webView = (WebView) findViewById(R.id.webView); // webView加载web资源 webView.loadUrl("http://baidu.com"); /* * 覆盖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去处理一些页面控制和请求通知 }); } }
结果是打开在我们的webview上面而不是浏览器上
package com.example.android2_webview; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { private String url = "http://2014.qq.com/"; private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { // TODO Auto-generated method stub webView = (WebView) findViewById(R.id.webView); // webView加载web资源 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去处理一些页面控制和请求通知 }); //启用支持JavaScript WebSettings webSettings=webView.getSettings(); webSettings.setJavaScriptEnabled(true); } }
结果发现,我懵比了,在我点击一个进入页面,看完后我返回结果整个退出了。
7-4 使用WebView显示网页(三)
package com.example.android2_webview; import android.net.Uri; import android.os.Bundle; import android.os.SystemClock; import android.app.Activity; import android.content.Intent; import android.view.KeyEvent; import android.view.Menu; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { private String url = "http://2014.qq.com/"; private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { // TODO Auto-generated method stub webView = (WebView) findViewById(R.id.webView); // webView加载web资源 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去处理一些页面控制和请求通知 }); // 启用支持JavaScript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); } // 改写物理按键——返回的逻辑 @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让url直接在WebView中打开,所以WebView默认会记录访问的历史记录,
当你webview覆盖了URL加载,他会自动生成历史访问记录。你可以通过goBack()或goForward()向前或向后访问已访问过的站点。
加一个人Toast:
// 改写物理按键——返回的逻辑 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub Toast.makeText(this, webView.getUrl(),Toast.LENGTH_LONG).show(); if (keyCode == KeyEvent.KEYCODE_BACK) {// 如果按下的按钮等于“返回键” if (webView.canGoBack()) { webView.goBack();// 返回上一个页面 return true; } else { System.exit(0);// 退出程序 } } return super.onKeyDown(keyCode, event); } }
为什么回到已经是最后一个URL历史记录了,点了以后屏幕会一闪而没有退出程序,是因为这个URL不是真正的URL,而是通过重定向跳到这里的,可以用吐司,webView.getUrl打印每一次回退的地址
7-5 使用WebView显示网页(四)
package com.example.android2_webview; import android.net.Uri; import android.os.Bundle; import android.os.SystemClock; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.view.KeyEvent; import android.view.Menu; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends Activity { private String url = "http://2014.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);// 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加载本地资源 // webView.loadUrl("file:///android_asset/example.html"); // webView加载web资源 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去处理一些页面控制和请求通知 }); // 启用支持JavaScript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { // TODO Auto-generated method stub // newProgress 1—100的整数 if (newProgress == 100) { // 网页加载完毕,关闭progressDialog closeDialog(); } else { // 网页正在加载,打开progressDialog openDialog(newProgress); } } private void openDialog(int newProgress)// 进度在加载,显示进度对话框 { // TODO Auto-generated method stub if (dialog != null) { dialog = new ProgressDialog(MainActivity.this); dialog.setTitle("正在加载");// 设置dialog标题 dialog.setProgress(newProgress);// 把获取到的进度设置到ProgressDialog; dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置dialog风格 dialog.show();// 显示出来 } else {// dialog对象已经有了 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 Toast.makeText(this, webView.getUrl(), Toast.LENGTH_LONG).show(); if (keyCode == KeyEvent.KEYCODE_BACK) {// 如果按下的按钮等于“返回键” if (webView.canGoBack()) { webView.goBack();// 返回上一个页面 return true; } else { System.exit(0);// 退出程序 } } return super.onKeyDown(keyCode, event); } }
WebView的缓存使用
package com.example.android2_webview; import android.net.Uri; import android.os.Bundle; import android.os.SystemClock; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.view.KeyEvent; import android.view.Menu; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends Activity { private String url = "http://2014.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);// 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加载本地资源 // webView.loadUrl("file:///android_asset/example.html"); // webView加载web资源 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去处理一些页面控制和请求通知 }); // 启用支持JavaScript WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); // WebView加载页面优先使用缓存加载 webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);[Window/Show View/Android/File Explorer/data/data/你要查找的项目/cache or databases] webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { // TODO Auto-generated method stub // newProgress 1—100的整数 if (newProgress == 100) { // 网页加载完毕,关闭progressDialog closeDialog(); } else { // 网页正在加载,打开progressDialog openDialog(newProgress); } } private void openDialog(int newProgress)// 进度在加载,显示进度对话框 { // TODO Auto-generated method stub if (dialog != null) { dialog = new ProgressDialog(MainActivity.this); dialog.setTitle("正在加载");// 设置dialog标题 dialog.setProgress(newProgress);// 把获取到的进度设置到ProgressDialog; dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);// 设置dialog风格 dialog.show();// 显示出来 } else {// dialog对象已经有了 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 Toast.makeText(this, webView.getUrl(), Toast.LENGTH_LONG).show(); if (keyCode == KeyEvent.KEYCODE_BACK) {// 如果按下的按钮等于“返回键” if (webView.canGoBack()) { webView.goBack();// 返回上一个页面 return true; } else { System.exit(0);// 退出程序 } } return super.onKeyDown(keyCode, event); } }