WebView用途

通过Intent调用系统浏览器:

引言:

Uri uri = Uri.parse(url);//url为你要链接的地址

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

startActivity(intent);

将WebView加入你的应用:

只需在活动布局中加入<WebView>元素即可

<WebView

android:id="..."

...                >

</WebView>

要在WebView加载页面,使用loadUrl()

//使页面获得焦点

webView.requestFocus();

在它有效工作之前,你要保证你的应用能访问网络。要访问网络,需要在你的配置文件中获取INTERNET权限。

<uses-permission android:name="android.permission.INTERNET"/>

处理页面导航:

当用户点击一个WebView中的页面的链接时,通常,是由默认的浏览器打开并加载目标URL的。然而,你可以在WebView中覆盖这一行为,那么链接就会在WebView中打开。

webView.setWebViewClient( new WebViewClient() );

在WebView中使用Javascript

如果你想要加载在WebView中的web页面使用Javascript,你需要在WebView中启动Javascript。启动Javascript你可以通过WebView中带有的WebSetting来启用它。你可以通过getSettings()来获取WebSettings的值,然后通过setJavaScriptEnabled() 来启用Javascript。

WebView webView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true);

后退与前进:

当你的WebView覆盖了URL加载,它会自动生成历史访问记录,你可以通过goBack()或goForward()向前或向后访问已访问过的站点。

@Override

public boolean onKeyDown( int keyCode, keyEvent event){

if(keyCode == keyEvent.KEYCODE_BACK)&&myWebView.canGoBack(){

webView.goBack();

return true;

}
return super.onKeyDown(keyCode,event);

}

判断页面的加载过程;

由于有些页面可能加载缓慢,所以我们需要去判断页面的加载过程,制作进度条给予用户良好的体验效果。

webView.setWebChromeClient(new WebChromeClient(){

@Override

public void onProgressChanged(WebView view, int newProgress) {

if (newProgress == 100) {

//页面加载完毕,关闭

}else {

//页面正在加载

}

});

WebView缓存的运用:

优先使用缓存:

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

不使用缓存:

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

public class MainActivity extends Activity {
private String url = "http://2016.qq.com";
private WebView webView;
private ProgressDialog dialog; @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() {
// TODO Auto-generated method stub
webView = (WebView) findViewById(R.id.webView);
// webView.loadUrl("file:///android_asset/baidu.html");//加载一个资源文件(本地文件)
//加载外部资源
webView.loadUrl("url");
//覆盖WebView默认通过第三方或者是系统浏览器打开网页的行为,使得网页可以在webview中打开
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
//返回值是true的时候控制网页在WebView中去打开,如果为false调用系统浏览器或第三方浏览器去打开
view.loadUrl(url);
return true; }
//webviewClient帮助WebView去处理一些页面控制和请求通知 });
//启用支持Javascipt
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
//优先使用缓存加载
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub //newProgress 1-100之间的整数
if (newProgress == 100) {
//页面加载完毕,关闭
closeDialog(); }else {
//页面正在加载
openDialog(newProgress);
} super.onProgressChanged(view, newProgress);
} private void openDialog(int newProgress) {
// TODO Auto-generated method stub
if(dialog == null){
dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle("on time");
dialog.setProgress(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(newProgress);
dialog.show();
}else{
dialog.setProgress(newProgress);
} } private void closeDialog() {
// TODO Auto-generated method stub
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
dialog=null; } }
}); }
//改写物理按键——返回的逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK){
if(webView.canGoBack()){
webView.goBack();//返回上一页面
return true;
}else {
System.exit(0);//退出程序
}
} return super.onKeyDown(keyCode, event);
}
}

总结如下:

webview组件如何使用

1)       添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。

2)       在要Activity中生成一个WebView组件:WebView webView = new WebView(this);或者可以在activity的layout文件里添加webview控件:

3)       设置WebView基本信息:
          如果访问的页面中有Javascript,则webview必须设置支持Javascript。
          webview.getSettings().setJavaScriptEnabled(true);  
          触摸焦点起作用
          requestFocus();
          取消滚动条
          this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

4)       设置WevView要显示的网页:
          互联网用:webView.loadUrl("http://www.google.com"); 
          本地文件用:webView.loadUrl("file:///android_asset/XX.html");  本地文件存放在:assets文件中

5)       如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。给WebView添加一个事件监听对象(WebViewClient)并重写其中的一些方法:
 shouldOverrideUrlLoading:对网页中超链接按钮的响应。当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url。比如当webview内嵌网页的某个数字被点击时,它会自动认为这是一个电话请求,会传递url:tel:123,如果你不希望如此可通过重写shouldOverrideUrlLoading函数解决:

http://blog.csdn.net/chenshijun0101/article/details/7045394

Android——WebView的更多相关文章

  1. Android WebView 302斗争之旅

    一.背景 越来越多的业务接入,项目内多多少少会出现几个H5页面,只是单纯的提供WebView容器接入H5页面根本满足不了需求,他们需要登录态,需要制定协议控制Native的导航栏,或者需要JsBrid ...

  2. Android WebView useragent

    今天介绍一下Android WebView UserAgent, User-Agent(简称UA)是HTTP请求头部用来标识客户端信息的字符串, 包括操作系统, 浏览器等信息.为了建立手机客户端的信息 ...

  3. android webview开发问题及优化汇总

    我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题.就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来.有些是老生常谈,有些则是个人摸索得出解决方 ...

  4. Android WebView 开发教程

    声明在先:必须在AndroidMainfest.xml 里面声明权限,否则在Java里面编写的所有WebView浏览网页的代码都无法正常使用 <uses-permission android:n ...

  5. [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案

    [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案 问题情景 在Android里,可以使用WebView来呈现本地或是远程的网页内容.但是在显示本地网页时,如 ...

  6. Android webview通过http get下载文件下载两次的问题及解决方法

    一.现象 一般通过Android webview进行下载文件的方法是 1.重写DownloadListener的onDownloadStart方法,在onDownloadStart方法中弹出对话框提示 ...

  7. Android WebView常见问题及解决方案汇总

    Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是 ...

  8. android webview 底层实现的逻辑

    其实在不同版本上,webview底层是有所不同的. 先提供个地址给大家查:http://grepcode.com/file/repository.grepcode.com/java/ext/com.g ...

  9. Android WebView访问SSL证书网页(onReceivedSslError)

    Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebView ...

  10. Android WebView常见问题解决方案汇总

    问题目录: 1.为WebView自定义错误显示界面: 2.WebView cookies清理 3.清理cache 和历史记录 4.判断WebView是否已经滚动到页面底端 5.URL拦截 6.处理We ...

随机推荐

  1. ipad&mobile通用webapp框架前哨战

    响应式设计的意义 随着移动设备的发展,移动设备以迅猛的势头分刮着PC的占有率,ipad或者android pad的市场占有率稳步提升,所以我们的程序需要在ipad上很好的运行,对于公司来说有以下负担: ...

  2. ES6笔记(一):ES6所改良的javascript“缺陷”

    块级作用域 ES5没有块级作用域,只有全局作用域和函数作用域,由于这一点,变量的作用域甚广,所以一进入函数就要马上将它创建出来.这就造成了所谓的变量提升. ES5的"变量提升"这一 ...

  3. Dynamics CRM 2015-超大Solution导入问题

    我们在将比较大的solution导入CRM的时候,经常会遇到超时的问题,这是因为CRM的本身的优化限制导致的,那么如何解决呢? 官方已经有了解决方案了. 在浏览完两种解决方法之后,我们要知道的是: 1 ...

  4. 时间戳TimeStamp处理

     我获得这个时间戳是得想除以1000再处理的,看看你们的需要先除多少再处理 //时间戳处理 NSInteger time = timeStamp / 1000; NSNumber *timer = [ ...

  5. seL4之hello-3征途

    seL4之hello-3征途 回顾上周 了解seL4的启动流程和初始化线程 了解seL4的几种内核对象和权能机制 完成hell0-2的运行. 补充上周 1.找到根任务(初始化线程)的创建具体的位置(那 ...

  6. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  7. zip命令的基本用法

    zip命令的基本用法是: zip [参数] [打包后的文件名] [打包的目录路径] linux zip命令参数列表: -a 将文件转成ASCII模式 -F 尝试修复损坏的压缩文件 -h 显示帮助界面  ...

  8. List集合的removeAll(Collection<E> col) 和clear方法的区别

    //removeAll()方法private static void testList(){ List<String> list = new ArrayList<String> ...

  9. L2-011. 玩转二叉树

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA28AAAHQCAIAAAC5rsUiAAAgAElEQVR4nO3dzYts953n+foXcpUL0Q

  10. [html/css]清除浮动的相关技巧

    以前只了解得很浅显,转载了一篇不错的文,学习参考 浮动会使当前标签产生向上浮的效果,同时会影响到前后标签.父级标签的位置及 width height 属性.而且同样的代码,在各种浏览器中显示效果也有可 ...