使用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 }
时间: 2024-10-12 19:56:54