Android攻城狮 WebView(显示网页)

使用WebView在界面中显示网页
通过Intent调用系统浏览器
Uri uri=Uri.parse(url);//url为链接的地址
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
-----------------------------
课程目标:通过WebView自制一个简易网页浏览器
课程内容:
(1)将WebView加入到你的应用
(2)使用WebView加载页面
(3)获取网络访问权限(在AndroidManifest中配置)
(4)在WebView中使用Javascript
(5)处理页面加载进程
(6)后退与前进
(7)判断页面的加载过程
(8)WebView缓存的运用(对浏览器的优化)


要在应用中加入WbeView,只需要在你的活动布局中加入<WebView>元素即可
<WebView
	android:id="@+id/webView"
	android:layout_width="match_parent"
	android:layout_height="match_parent" />
加载页面,使用 loadUrl()
web资源: webView.loadUrl("http://www.baidu.com")
本地资源: webView。loadUrl("file:///android_asset/xxx.html");本地文件放在asset文件中

//使页面获得焦点
webView.requestFocus();
------------------------
获取网络访问权限
在它有效工作之前,要保证应用能访问网络。要访问网络,需要在配置文件中获取INTERNET权限:
<manifest ...>
<uses_permission android:name="android.permission.INTERNET" />
...
</manifest>


在WebView中使用JavaScript
如果想在webView中加载的web页面使用JavaScript,需要在WebView中启用JavaScript,通过WebView带有的WebSettings来启用它。可以通过getSettings()获取WebSettings的值,然后通过setJavaScriptEnabled()来启用JavaScript。
webView=(WebView)findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();

我们使用 Toast()来显示当前页面的地址。
在网页上点击退回时,可能因为网页自身存在请求重定向,所以可能已经跳转了好几个页面,这时我们需要连续点击返回键才能真正退出程序。
//改写物理按键——返回的逻辑
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode== KeyEvent.KEYCODE_BACK){ //KeyEvent.KEYCODE_BACK是常量,KeyEvent还有很多其他常量
            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);
    }

webSettings.setJavaScriptEnabled(true);

  1 public class MainActivity extends Activity implements OnClickListener {  
  2       
  3     private String url = null;  
  4     private WebView webView;  
  5     private EditText et_url;  
  6     private Button btn_login;  
  7     private Button btn_back;  
  8     private Button btn_exit;  
  9     private Button btn_forward;  
 10     private Button btn_menu;  
 11   
 12     @Override  
 13     protected void onCreate(Bundle savedInstanceState) {  
 14         super.onCreate(savedInstanceState);  
 15         // 窗口进度条  
 16         requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);  
 17         setContentView(R.layout.fragment_main);  
 18   
 19         setProgressBarIndeterminate(true);  
 20   
 21         webView = (WebView) findViewById(R.id.webView);  
 22         et_url = (EditText) findViewById(R.id.et_url);  
 23         btn_login = (Button) findViewById(R.id.btn_login);  
 24         btn_back = (Button) findViewById(R.id.btn_back);  
 25         btn_exit = (Button) findViewById(R.id.btn_exit);  
 26         btn_forward = (Button) findViewById(R.id.btn_forward);  
 27         btn_menu = (Button) findViewById(R.id.btn_menu);  
 28         // 对五个按钮添加点击监听事件  
 29         btn_login.setOnClickListener(this);  
 30         btn_back.setOnClickListener(this);  
 31         btn_exit.setOnClickListener(this);  
 32         btn_forward.setOnClickListener(this);  
 33         btn_menu.setOnClickListener(this);  
 34     }  
 35   
 36     // btn_login的触发事件 点击后 webView开始读取url  
 37     protected void startReadUrl(String url) {  
 38         // TODO Auto-generated method stub  
 39         // webView加载web资源  
 40         webView.loadUrl(url);  
 41         // 覆盖webView默认通过系统或者第三方浏览器打开网页的行为  
 42         // 如果为false调用系统或者第三方浏览器打开网页的行为  
 43         webView.setWebViewClient(new WebViewClient() {  
 44             @Override  
 45             public boolean shouldOverrideUrlLoading(WebView view, String url) {  
 46                 // TODO Auto-generated method stub  
 47                 // webView加载web资源  
 48                 view.loadUrl(url);  
 49                 return true;  
 50             }  
 51         });  
 52         // 启用支持javascript  
 53         WebSettings settings = webView.getSettings();  
 54         settings.setJavaScriptEnabled(true);  
 55         // web加载页面优先使用缓存加载  
 56         settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  
 57         // 当打开页面时 显示进度条 页面打开完全时 隐藏进度条  
 58         webView.setWebChromeClient(new WebChromeClient() {  
 59             @Override  
 60             public void onProgressChanged(WebView view, int newProgress) {  
 61                 // TODO Auto-generated method stub  
 62                 setTitle("本页面已加载" + newProgress + "%");  
 63                 if (newProgress == 100) {  
 64                     closeProgressBar();  
 65                 } else {  
 66                     openProgressBar(newProgress);  
 67                 }  
 68                 super.onProgressChanged(view, newProgress);  
 69             }  
 70         });  
 71     }  
 72   
 73     // 打开进度条  
 74     protected void openProgressBar(int x) {  
 75         // TODO Auto-generated method stub  
 76         setProgressBarIndeterminateVisibility(true);  
 77         setProgress(x);  
 78     }  
 79   
 80     // 关闭进度条  
 81     protected void closeProgressBar() {  
 82         // TODO Auto-generated method stub  
 83         setProgressBarIndeterminateVisibility(false);  
 84     }  
 85   
 86     // 改写物理按键 返回键的逻辑  
 87     @Override  
 88     public boolean onKeyDown(int keyCode, KeyEvent event) {  
 89         // TODO Auto-generated method stub  
 90         if (keyCode == KeyEvent.KEYCODE_BACK) {  
 91             if (webView.canGoBack()) {  
 92                 // 返回上一页面  
 93                 webView.goBack();  
 94                 return true;  
 95             } else {  
 96                 // 退出程序  
 97                 finish();  
 98             }  
 99         }  
100         return super.onKeyDown(keyCode, event);  
101     }  
102   
103     // 对按钮事件的处理  
104     @Override  
105     public void onClick(View v) {  
106         // TODO Auto-generated method stub  
107         switch (v.getId()) {  
108         case R.id.btn_login:  
109             url = "http://" + et_url.getText().toString();  
110             url = url.replace(" ", "");  
111             startReadUrl(url);  
112             break;  
113         case R.id.btn_back:  
114             if (webView.canGoBack()) {  
115                 webView.goBack();  
116             } else {  
117                 finish();  
118             }  
119             break;  
120         case R.id.btn_forward:  
121             if (webView.canGoForward()) {  
122                 webView.goForward();  
123             }  
124             break;  
125         case R.id.btn_exit:  
126             finish();  
127             break;  
128         case R.id.btn_menu:  
129             startReadUrl("http://www.baidu.com");  
130             break;  
131         }  
132     }  
133 }

 




原文地址:https://www.cnblogs.com/my334420/p/6710216.html