您的位置:首页 > 移动开发

Activity打开WebView一个小例子

2016-01-15 23:04 288 查看
一、什么是WebView:

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)获得网页的标题
WebViewClient:辅助WebView处理各种通知与请求事件!

比如下面这些方法:
方法作用
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)遇到不可恢复的错误信息时调用
WebSettings:WebView相关配置的设置,比如setJavaScriptEnabled()设置是否允许JS脚本执行

部分方法如下:
方法作用
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,网站图标,加载进度条等
这里重要区分三个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文档

三、实例:

达到的效果



代码:
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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: