Activity打开WebView一个小例子
2016-01-15 23:04
288 查看
一、什么是WebView:
Android内置webkit内核的高性能浏览器,而Webview则是在这个基础进行封装后的一个控件,WebView直译网页视图,我们可以简单看做一个嵌套到View上的一个浏览器!
二、相关方法:
先上官方文档:WebView
并不打算一个个地去讲属性,用到哪个写哪个,其他的自行查阅文档!
除了直接WebView外我们还可以添加你自己的行为,可以自行定制下述类:
WebChromeClient:辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等!
比如下面这些:
WebViewClient:辅助WebView处理各种通知与请求事件!
比如下面这些方法:
WebSettings:WebView相关配置的设置,比如setJavaScriptEnabled()设置是否允许JS脚本执行
部分方法如下:
这里重要区分三个load方法的区别:
loadUrl():直接显示网页内容(单独显示网络图片),一般不会出现乱码。
loadData(data, “text/html”, “UTF-8”):用来加载URI格式的数据,不能通过网络来加载内容,
不能加载图片,而且经常会遇到乱码的问题,我们知道String类型的数据主要是Unicode编码的,
而WebView一般为了节省资源使用的是UTF-8编码,尽管我们按上面写了,但是还需要为webView设置:
webview.getSettings().setDefaultTextEncodingName(“UTF -8”);
loadDataWithBaseURL(baseUrl, string, “text/html”, “utf-8”, null):loadData类的一个
增强类,可以加载图片,baseUrl为你存储的图片路径,而且只需在这里设置utf-8就可以解决乱码
问题了!
这里只是列举了部分属性而已,其他的还需自行查阅官方文档:
WebChromeClient文档
WebViewClient文档
WebSettings文档
三、实例:
达到的效果
代码:
隐藏ActionBar。
Android内置webkit内核的高性能浏览器,而Webview则是在这个基础进行封装后的一个控件,WebView直译网页视图,我们可以简单看做一个嵌套到View上的一个浏览器!
二、相关方法:
先上官方文档:WebView
并不打算一个个地去讲属性,用到哪个写哪个,其他的自行查阅文档!
除了直接WebView外我们还可以添加你自己的行为,可以自行定制下述类:
WebChromeClient:辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等!
比如下面这些:
方法 | 作用 |
---|---|
onJsAlert(WebView view,String url,String message,JsResult result) | 处理Js中的Alert对话框 |
onJsConfirm(WebView view,String url,String message,JsResult result) | 处理Js中的Confirm对话框 |
onJsPrompt(WebView view,String url,String message,String defaultValue,JsPromptResult result) | 处理Js中的Prompt对话框 |
onProgressChanged(WebView view,int newProgress) | 当加载进度条发生改变时调用 |
onReceivedIcon(WebView view, Bitmap icon) | 获得网页的icon |
onReceivedTitle(WebView view, String title) | 获得网页的标题 |
比如下面这些方法:
方法 | 作用 |
---|---|
onPageStared(WebView view,String url) | 通知主程序网页开始加载 |
onPageFinished(WebView view,String url,Bitmap favicon) | 通知主程序,网页加载完毕 |
doUpdateVisitedHistory(WebView view,String url,boolean isReload) | 更新历史记录 |
onLoadResource(WebView view,String url) | 通知主程序WebView即将加载指定url的资源 |
onScaleChanged(WebView view,float oldScale,float newScale) | ViewView的缩放发生改变时调用 |
shouldOverrideKeyEvent(WebView view,KeyEvent event) | 控制webView是否处理按键时间,如果返回true,则WebView不处理,返回false则处理 |
shouldOverrideUrlLoading(WebView view,String url) | 控制对新加载的Url的处理,返回true,说明主程序处理WebView不做处理,返回false意味着WebView会对其进行处理 |
onReceivedError(WebView view,int errorCode,String description,String failingUrl) | 遇到不可恢复的错误信息时调用 |
部分方法如下:
方法 | 作用 |
---|---|
getSettings() | 返回一个WebSettings对象,用来控制WebView的属性设置 |
loadUrl(String url) | 加载指定的Url |
loadData(String data,String mimeType,String encoding) | 加载指定的Data到WebView中.使用”data:”作为标记头,该方法不能加载网络数据.其中mimeType为数据类型如:textml,image/jpeg. encoding为字符的编码方式 |
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl) | 比上面的loadData更加强大 |
setWebViewClient(WebViewClient client) | 为WebView指定一个WebViewClient对象.WebViewClient可以辅助WebView处理各种通知,请求等事件。 |
setWebChromeClient(WebChromeClient client) | 为WebView指定一个WebChromeClient对象,WebChromeClient专门用来辅助WebView处理js的对话框,网站title,网站图标,加载进度条等 |
loadUrl():直接显示网页内容(单独显示网络图片),一般不会出现乱码。
loadData(data, “text/html”, “UTF-8”):用来加载URI格式的数据,不能通过网络来加载内容,
不能加载图片,而且经常会遇到乱码的问题,我们知道String类型的数据主要是Unicode编码的,
而WebView一般为了节省资源使用的是UTF-8编码,尽管我们按上面写了,但是还需要为webView设置:
webview.getSettings().setDefaultTextEncodingName(“UTF -8”);
loadDataWithBaseURL(baseUrl, string, “text/html”, “utf-8”, null):loadData类的一个
增强类,可以加载图片,baseUrl为你存储的图片路径,而且只需在这里设置utf-8就可以解决乱码
问题了!
这里只是列举了部分属性而已,其他的还需自行查阅官方文档:
WebChromeClient文档
WebViewClient文档
WebSettings文档
三、实例:
达到的效果
代码:
package com.example.mycsdn; import android.app.ActionBar; import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; public class MainActivity extends Activity { private static long ExitTime = 0; private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar=getActionBar(); webView=new WebView(this); webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); webView.getSettings().setJavaScriptEnabled(true);//设置webView属性,运行JS脚本 webView.loadUrl("http://blog.csdn.net/xiangyong_1521");//连接 setContentView(webView);//显示 } /* * 我们需要重写回退按钮的事件,当用户点击回退按钮判断 * 1、webView.canGoBack()判断网页是否能后退,可以则goback() * 2、如果不可以,点击两次退出APP,弹出提示Toast */ @Override public void onBackPressed() { if(webView.canGoBack()){ webView.goBack(); }else{ if(System.currentTimeMillis()-ExitTime>2000){ Toast.makeText(getApplicationContext(), "再按一次退出程序", 0).show(); ExitTime=System.currentTimeMillis(); }else{ super.onBackPressed(); } } } }清单配置文件里在MainActivity里加上: android:theme="@android:style/Theme.Holo.NoActionBar"
隐藏ActionBar。
相关文章推荐
- 加速你的Android应用
- [Swift开发实战]-千里之行,始于足下
- Swift-RES
- Android Volley的基本用法
- 微信三级分销系统介绍
- Android开源框架Universal-Image-Loader基本介绍和使用
- android布局属性详解
- Android 之多线程断点续传之(一)
- 控件WebView显示网页
- Unity集成JPush本地消息推送问题
- android的文本状态选择器-ColorStateList
- Save could not be completed. Reason: some characters cannot be mapped using “ISO-8859-1“
- android 自动提示文本框
- iOSCore Location地理定位的简单实用
- 启动控制面板中的applet时的一点笔记--发文于2013-10-22
- iOS之应用偏好设置
- iOS学习之应用偏好设置
- Android笔记--对Service、Object、Contentprovider、泛型的理解
- Android学习之JNI
- 蓝懿IOS阶段测试