用WebVie实现简单的浏览器功能
来源:互联网 发布:昆山java招聘 编辑:程序博客网 时间:2024/05/23 02:02
WebView简单的来说就是把Web页面嵌入到我们的手机屏幕中。
现在来实现一下 。
首先还是看下布局文件:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
这里注意一点,为了我们的web页面能够全屏显示,我们需要设置layout_width和layout_height为铺满全屏(match_parent)
这里看下activity的处理,首先代码已经全部写好了,先上代码:
package com.example.lolli.webview;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 { // 定义webView控件 private WebView webView; // 定义一个加载进度条 private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化webView webView = (WebView) findViewById(R.id.webView); //获取webView设置 WebSettings setting = webView.getSettings(); //设置启用javascript setting.setJavaScriptEnabled(true); //设置加载优先使用缓存 setting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // 设置url为百度首页 webView.loadUrl("http://www.baidu.com"); /** * 监听web加载进度 */ webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { //newProgress 1-100 if (newProgress==100){ // 如果进度为100 》 判断当前是否有progressDialog且progressDialog正在显示 》 关闭progressDialog 设置progressDialog为null if (progressDialog!=null && progressDialog.isShowing()){ progressDialog.dismiss(); progressDialog = null; } }else{ // 判断是为为空 》 初始化progressDialog并设置样式为横向加载的样式 》设置进度 》设置显示 if (progressDialog==null){ progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle("页面加载进度"); progressDialog.setProgress(newProgress); progressDialog.show(); }else{ progressDialog.setProgress(newProgress); } } } }); } /** * 设置手机返回键作用,按返回键判断是否退出或到上个页面 * @param keyCode * @param event * @return */ @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); }}
现在来解释一下代码:
如果什么都不考虑,只想简单的显示web页面,我们只需要设置loadURL就可以了:
package com.example.lolli.webview;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 { // 定义webView控件 private WebView webView; // 定义一个加载进度条 private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化webView webView = (WebView) findViewById(R.id.webView); // 设置url为百度首页 webView.loadUrl("http://www.baidu.com"); }}
只需要如上代码即可。。。
这里为了增强用户体验:
我们首先打开了设置,并设置了对javascript的支持,一直为了更快,我们启用了有限加载缓存。
webView = (WebView) findViewById(R.id.webView); //获取webView设置 WebSettings setting = webView.getSettings(); //设置启用javascript setting.setJavaScriptEnabled(true); //设置加载优先使用缓存 setting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
但是我们发现,我们点击一个链接,然后就是等待,如果等待时间很长的话用户可能会认为页面是不是死掉了 ,所以为了加强用户体验,我们设置加了一个页面加载的进度条。。。 设置WebChromeClient我们可能监听页面加载进度,然后得到一个newProgress,这里newProgress最大值是100,即加载完成,我们拿到这个值设置到progressDialog里面,就可以实现进度条显示与隐藏了。。
/** * 监听web加载进度 */ webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { //newProgress 1-100 if (newProgress==100){ // 如果进度为100 》 判断当前是否有progressDialog且progressDialog正在显示 》 关闭progressDialog 设置progressDialog为null if (progressDialog!=null && progressDialog.isShowing()){ progressDialog.dismiss(); progressDialog = null; } }else{ // 判断是为为空 》 初始化progressDialog并设置样式为横向加载的样式 》设置进度 》设置显示 if (progressDialog==null){ progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle("页面加载进度"); progressDialog.setProgress(newProgress); progressDialog.show(); }else{ progressDialog.setProgress(newProgress); } } } });
还有一个细节,就是我们点击返回键的时候,不管在什么时候,他都会直接退出应用 ,这样显然是不好的 。
所以我们对返回键的按下做了处理:
/** * 设置手机返回键作用,按返回键判断是否退出或到上个页面 * @param keyCode * @param event * @return */ @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); }
如此一来,整个webView的案例就ok了 。。
最后,最重要的一点 :::
这里我们访问了外网,所以我们必须加上访问外网的权限:::
我们必须在AndroidMainFest.xm里面加上这么一句:::
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
这章有写到一个没说过的东西,就是progreddDialog,其实他跟progressBar是一样的,我们只需设置值就可以让他进度条显示了,只是展现的方式不一样。。我们只需要增加写一遍,然后运行一下看下效果,很容易就明白了。。。
- 用WebVie实现简单的浏览器功能
- 简单的图片浏览器和手势识别的功能实现
- 非常简单的兼容多浏览器Javascript实现分页功能
- webVie加载url如何不让跳转到系统的(浏览器)
- 用CSS3实现浏览器的缩放功能
- 用Swift实现一个简单的浏览器
- 简单模拟浏览器的解析功能
- 简单图片浏览器的实现
- 用tcl实现的简单聊天功能
- 用UDP实现简单的聊天功能
- 用MediaRecorder实现简单的录像功能
- ios-day20-01(使用UIWebView实现一个简单功能的浏览器)
- 【java学习记录】13.实现简单的浏览器功能:获取源代码、保存源代码、获取图片
- 怎么用MFC实现浏览器收藏的功能
- 用JS实现不同浏览器的图片预览功能
- c/c++实现浏览器的下载功能
- 限次版功能的简单实现
- 实现简单的notepad功能
- HashMap、LinkedHashMap、Hashtable和TreeMap用法和区别
- 常用Git命令
- listview与baseadapter
- iOS HTTP详解
- ULua杂记
- 用WebVie实现简单的浏览器功能
- form表单中的label标签
- 今日BBC
- Java实用类汇总
- ioc(控制的反转) 和di(依赖注入)
- 面试常客Handler详细解析(更新UI的几种方式)(六)
- CodeForces - 593B Anton and Lines (数学方程&技巧) 判断直线是否相交
- JavaMail使用SMTP协议发送电子邮件
- sim6320C,UDP通讯调试记录