package com.example.admin.test_0309_1; import android.app.ProgressDialog; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.KeyEvent; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { private String url="http://www.baidu.com"; private WebView webView; private ProgressDialog progressDialog; @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() { webView = (WebView) findViewById(R.id.webView); webView.loadUrl("http://www.hao123.com"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //为true的的时候就在webview中打开 view.loadUrl(url); return true; } }); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { //网页加载完毕 closeDialog(); } else { //网页正在加载 openDialog(newProgress); } super.onProgressChanged(view, newProgress); } private void closeDialog() { if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } } private void openDialog(int newProgress) { if (progressDialog == null) { progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setTitle("正在加载"); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgress(newProgress); progressDialog.show(); } else { progressDialog.setProgress(newProgress); } } }); } //改写物理按键--返回的逻辑 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ //Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show(); if(webView.canGoBack()){ webView.goBack(); return true; }else{ System.exit(0); } } return super.onKeyDown(keyCode, event); } }
当然布局中已经把webView加入了布局中 这里运行webView必须得先在Androidmanifest里加入入网许可如下:
<uses-permission android:name="android.permission.INTERNET"/>然后就设置webView就可以了
这里记录一下几个重要的设置
/* Uri uri=Uri.parse(url); Intent intent=new Intent(Intent.ACTION_VIEW,uri); startActivity(intent); */url为设置好的超链接字符串 上面是可以用intent方式来打开 当然 这个方法会默认使用系统中自带的浏览器或者第三方浏览器来打开网页
所以为了让webView打开网页就涉及一个方法 覆盖系统中的浏览器用控件自己打开 方法如下
webView = (WebView) findViewById(R.id.webView); webView.loadUrl("http://www.hao123.com"); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //为true的的时候就在webview中打开 view.loadUrl(url); return true; } });
WebViewClient中的 shoulidOverrideUrlLoading方法 返回true即为使用控件打开 false相反
这里可以看到在方法中 有view.loadUrl(url) 这里的url并不是我一开始设置的url字符串 而是方法中的参数 他的数值应该是前面载入的 hao123
然后是set方法设置JS属性
WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true);
通过WebSetting方法来摄制JavaScript的载入 这里选择为true
此时的网页载入进去之后就会发现不管你打开多少的网页 只要你点击啊的back就会直接退出程序 所以这里需要重写在webview中back按键的响应
方法onKeyDown
public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK){ //Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show(); if(webView.canGoBack()){ webView.goBack(); return true; }else{ System.exit(0); } } return super.onKeyDown(keyCode, event); }
语言描述一下 如果按键是返回键
如果网页可以返回
那么返回
方法返回值 true
否则结束程序
最后的返回语句别删了
现在的网页就基本完成了 但是美中不足需要在其中加入一个进度条 这样可以在等待页面的时候显得不那么傻
所以有以下的方法
setWebChromeClient
webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { //网页加载完毕 closeDialog(); } else { //网页正在加载 openDialog(newProgress); } super.onProgressChanged(view, newProgress); } private void closeDialog() { if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } } private void openDialog(int newProgress) { if (progressDialog == null) { progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setTitle("正在加载"); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setProgress(newProgress); progressDialog.show(); } else { progressDialog.setProgress(newProgress); } } });添加方法后 进行设置 如果newProgress ==100 即是 如果进度条满了 那么 关闭进度条 当然这里的进度条是自己在前面要添加的 前面有学过 ProgressDialog
不为100就打开进度条
然后设置进度条打开关闭的方法
当然 打开肯定是先有的
档进度条==null 不存在时候 添加一个新的进度条 在当前界面 设置标题正在加载 设置风格 设置加入setWebChromeClient中的newProgress 然后show出来 否则直接加入newProgress
然后就是关闭的方法 如果不是空 就关闭咯
最后是webView运行模式 是否使用本地缓存
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);同样是webSetting中的一个方法 setCacheMode