Android——WebView
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的更多相关文章
- Android WebView 302斗争之旅
一.背景 越来越多的业务接入,项目内多多少少会出现几个H5页面,只是单纯的提供WebView容器接入H5页面根本满足不了需求,他们需要登录态,需要制定协议控制Native的导航栏,或者需要JsBrid ...
- Android WebView useragent
今天介绍一下Android WebView UserAgent, User-Agent(简称UA)是HTTP请求头部用来标识客户端信息的字符串, 包括操作系统, 浏览器等信息.为了建立手机客户端的信息 ...
- android webview开发问题及优化汇总
我们在native与网页相结合开发的过程中,难免会遇到关于WebView一些共通的问题.就我目前开发过程中遇到的问题以及最后得到的优化方案都将在这里列举出来.有些是老生常谈,有些则是个人摸索得出解决方 ...
- Android WebView 开发教程
声明在先:必须在AndroidMainfest.xml 里面声明权限,否则在Java里面编写的所有WebView浏览网页的代码都无法正常使用 <uses-permission android:n ...
- [Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案
[Android] WebView内的本地网页,使用XMLHttpRequest读取本地档案 问题情景 在Android里,可以使用WebView来呈现本地或是远程的网页内容.但是在显示本地网页时,如 ...
- Android webview通过http get下载文件下载两次的问题及解决方法
一.现象 一般通过Android webview进行下载文件的方法是 1.重写DownloadListener的onDownloadStart方法,在onDownloadStart方法中弹出对话框提示 ...
- Android WebView常见问题及解决方案汇总
Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是 ...
- android webview 底层实现的逻辑
其实在不同版本上,webview底层是有所不同的. 先提供个地址给大家查:http://grepcode.com/file/repository.grepcode.com/java/ext/com.g ...
- Android WebView访问SSL证书网页(onReceivedSslError)
Android WebView访问https SSL证书网页,如淘宝,需要在onReceivedSslError添加SSL支持 webview.setWebViewClient(new WebView ...
- Android WebView常见问题解决方案汇总
问题目录: 1.为WebView自定义错误显示界面: 2.WebView cookies清理 3.清理cache 和历史记录 4.判断WebView是否已经滚动到页面底端 5.URL拦截 6.处理We ...
随机推荐
- DevOps的基本原则与介绍
DevOps的基本原则与介绍 DevOps这个术语是developer与operations的合并简写.实现还有QA.DevOps描述与精简软件交付流程,在今天已经开始广泛的使用.强调从生 ...
- Lind.DDD敏捷领域驱动框架~介绍
回到占占推荐博客索引 最近觉得自己的框架过于复杂,在实现开发使用中有些不爽,自己的朋友们也经常和我说,框架太麻烦了,要引用的类库太多:之前架构之所以这样设计,完全出于对职责分离和代码附复用的考虑,主要 ...
- JSON转化为JAVABEAN集合
String str = "[{'id':'392','type':'jpg'},{'id':'393','type':'jpg'},{'id':'377','type':'jpg'}]&q ...
- 使用CSS3制作导航条和毛玻璃效果
导航条对于每一个Web前端攻城狮来说并不陌生,但是毛玻璃可能会相对陌生一些.简单的说,毛玻璃其实就是让图片或者背景使用相应的方法进行模糊处理.这种效果对用户来说是十分具有视觉冲击力的. 本次分享的主题 ...
- SAP CRM 在Web UI中创建搜索帮助
多数情况下,在Web UI为一个特定的字段提供搜索帮助需要在事务SE11中创建搜索帮助. (注:也可以通过在SE24中创建一个类并实现实现IF_BSP_WD_CUSTOM_F4_CALLBACK接口来 ...
- Java 相关书籍
Effective Java 中文第二版: Java并发编程实践: Java核心技术(原书第8版)卷I_基础知识: Java核心技术(原书第8版)卷II_高级特性: 深入理解Java虚拟机 JVM高级 ...
- jsmooth compilation failed error null
JSmooth 0.9.9-7 在将 jar 文件打包成 exe 文件时报错:jsmooth compilation failed error null 原因,没有指定 logo 图片文件. http ...
- mysql主备(centos6.4)
服务器基本环境: 两台centos6.4.iptables diabled .selinux disabled 两台的hosts解析 #yum install mysql -y //这个一定要装 ...
- Redis 与 数据库处理数据的两种模式
Redis 是一个高性能的key-value数据库. redis的出现,很大程度补偿了memcached这类key-value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用.它提供了Pyt ...
- centos7的网络设置
必备知识:linux下对文件的编辑操作 首先给出的是vi的基础 后面会有详细的远程连接Centos的方法 vi的基本概念 基本上vi可分为三种操作状态,分别是命令模式(Command mode).插 ...