在App中有时候会看到一些页面是以网页的形式展示,其原理就是运用了WebView,下面予以讲述WebView

1. 使用Intent调用系统浏览器或者第三方浏览器打开网页

调用系统浏览器打开页面

Uri uri=Uri.parse(url); //url为网页的地址

Intent intent=new Intent(Intent.ACTION_VIEW,uri);

startActivity(intent);

2. 使用WebView打开页面

Step one:在layout文件夹中新建webView的控件

Step two:在使用WebView的时候需要首先覆盖系统浏览器或者第三方浏览器打开网页

//webView加载web资源

webView.loadUrl (url);

/*

* 覆盖webView默认通过第三方或者系统浏览器打开网页的行为,使得网页可以在webView中打开

*/

webView.setWebViewClient(new WebViewClient(){

//webViewClient帮助webView去处理一些控制和请求通知

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

//返回值为true的时候控制网页在webView中打开,false则用系统浏览器或第三方浏览器打开

view.loadUrl(url);

return true;

}

});

Step Three:是否启用JavaScript[s1]

//启用JavaScript

WebSettings settings=webView.getSettings();

settings.setJavaScriptEnabled(true);

Step Four:通过物理按键的返回键予以返回上一页面

//改变物理按键--返回的逻辑

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

if(keyCode==KeyEvent.KEYCODE_BACK)

{

webView.goBack();

return true;

}

else

{

System.exit(0);//退出程序

return false;

}

Step Five:为了增加页面的交互性,可以加入进度条的显示

webView.setWebChromeClient(new WebChromeClient(){

@Override

public void onProgressChanged(WebView view, int newProgress[s2] ) {

if(newProgress==100)

{

//网页加载完毕,关闭progressDialog

closeDialog();

}

else

{

//网页正在加载,打开progressDialog

openDialog(newProgress);

}

}

private void closeDialog() {

if(dialog!=null&&dialog.isShowing())

{

dialog.dismiss();//消失dialog对话框

dialog=null;

}

}

private void openDialog(int newProgress) {

if(dialog==null)

{

dialog=new ProgressDialog(MainActivity.this);

dialog.setTitle("正在加载");

dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

dialog.setProgress(newProgress);//显示进度

dialog.show();

}

else

{

dialog.setProgress(newProgress);

}

}

});

}


[s1]为了提高页面的运行速度,可以优先使用缓存加载页面

//webView加载页面优先使用缓存加载

settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

[s2]newProgress:显示网页的加载进度,<int>类型

Android成长日记-WebView使用的更多相关文章

  1. Android成长日记-Android四大组件之Service组件的学习

    1.什么是Service? Service是Android四大组件中与Activity最相似的组件,它们都代表可执行的程序,Service与Activity的区别在于:Service一直在后台运行,它 ...

  2. Android成长日记-数据存储之SQLite[1]

    [SQLite简介] SQLite是R.Richard Hipp用C语言编写的开源嵌入式数据库引擎.它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行 ---支持高达2TB大小的数据库: ...

  3. Android成长日记-五大布局

    1. 五布局之线性布局LinearLayout 特点:它包含的子控件将以横向或竖向的方式排列 ps:android:gravity=”center|bottom”(gravity允许多级联用) Tip ...

  4. Android成长日记-数据存储之SharedPreferences

    数据篇-SharedPreferences Android的四种存储方式 1. SharedPreferences 2. SQLite 3. Content Provider 4. File ---- ...

  5. Android成长日记-使用ViewFlipper实现屏幕切换动画效果

    (一) ViewFlipper介绍 Android系统自带的一个多页面管理控件,它可以实现子界面的自动切换 (二) 为ViewFlipper加入View 1. 静态导入:在Layout布局文件中直接导 ...

  6. Android成长日记-使用ToggleButton实现灯的开关

    案例演示 此案例实现思路:通过ToggleButton控件,ImageView控件实现 ---xml代码: <!-- textOn:true textOff:falase[s1] --> ...

  7. Android成长日记-使用PagerAdapter实现页面切换

    Tip:此方式可以实现页面切换 1. 创建view1.xml,view2.xml,view3.xml,main.xml 在main.xml中创建 <android.support.v4.view ...

  8. Android成长日记-使用Intent实现页面跳转

    Intent:可以理解为信使(意图),由Intent来协助完成Android各个组件之间的通讯 Intent实现页面之间的跳转 1->startActivity(intent) 2->st ...

  9. Android成长日记-使用GridView显示多行数据

    本节将实现以下效果 Ps:看起来很不错的样子吧,而且很像九宫格/se ----------------------------------------------------------------- ...

随机推荐

  1. sobel算子

    #1,个人理解 网上查了很多资料,都说sobel算子是用来检测边缘的,分别给了两个方向上的卷积核,然后说明做法,就说这就是sobel算子.对于我个人来说,还有很多不明白的地方,所以理清下思路. #2, ...

  2. Java类加载和类反射回顾

    今天学习Spring,突然想重新复习一下Java类加载和类反射的.巩固一下底层原理.部分参考了李刚老师的<疯狂Java讲义>和陈雄华.林开雄的<Spring3.x企业应用开发实战&g ...

  3. FineUI v3.3.1 发布了!

    关于FineUI基于 ExtJS 的专业 ASP.NET 控件库. FineUI的使命创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No We ...

  4. Windows 部署 Redis 群集

    1,下载Redis for windows 的最新版本,解压到 c:\Redis 目录下备用https://github.com/MSOpenTech/redis/releases当前我使用的是 3. ...

  5. unity3d 三分钟实现简单的赛车漂移

    提到赛车游戏,大家最关心的应该就是漂移吧?! 从学unity开始,我就一直在断断续续的研究赛车 因为自己技术太烂.悟性太差等原因,我走了不少弯路 也许你会说,网上那么多资料,你不会查啊 是啊!网上一搜 ...

  6. .Net分布式异常报警系统-客户端及服务端API

    客户端 客户端的作用就是捕获未处理异常, 发送异常到服务端. 关于捕获未处理异常的方法参考 http://www.cnblogs.com/youring2/archive/2012/04/25/246 ...

  7. [HDU5904]LCIS(DP)

    题意: 给定两个序列,求它们的最长公共递增子序列的长度, 并且这个子序列的值是连续的 n,m<=1e5,a[i],b[i]<=1e6分析:dp[i]表示以数字i结尾的序列最长长度 dp[a ...

  8. C# Rotating Oval

    This program is used to show how to generate an oval. The moon's orbit around the sun is an oval two ...

  9. ElasticSearch入门系列(四)分布式初探

    序言:ElasticSearch致力于隐藏分布式系统的复杂性,以下的操作都是在底层自动完成的: 将你的文档分区到不同的容器或者分片(shards),他们可以存在于一个或多个节点中 将分片均匀的分配到各 ...

  10. 68 id -显示用户的id

    Linux id命令用于显示用户的ID,以及所属群组的ID. id会显示用户以及所属群组的实际与有效ID.若两个ID相同,则仅显示实际ID.若仅指定用户名称,则显示目前用户的ID. 语法 id [-g ...