初涉WebView编程

来源:互联网 发布:javiewer差不多的软件 编辑:程序博客网 时间:2024/05/29 14:14
1.什么是WebView
    WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页.WebView编程也叫浏览器编程,而浏览器编程涉及到html、js和css等等。
今天学习一下如何使用WebView!!!
2.怎么使用WebView
   1).WebView的实例化有2种方法:
                  1.在Activity中实例化WebView组件              
                WebView webView = new WebView(this);
                 Activity.setContentView(webView );
            
                  2.在布局文件中声明WebView ,在Activity中实例化
    2.)我们直接在WebView 上点击链接的话,会弹出Android内置的browser浏览器,而不是在我们WebView 上打开新窗口!切记切记!所以需要调用setWebViewClient(),传入一个WebViewClient对象,需要重写shouldOverrideUrlLoading()方法。
    3).为WebView配置url:webView.loadUrl("www.baidu.com");
    4).另外在WebView连接打开多个网页时,按回退键的话,不像普通的浏览器broswer是退出app,所以需要重写Activity的OnKeyDown()方法。
    5).在AndroidManifest.xml文件中添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>     //联网
详细代码
package com.mkk.webviewdemo;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.DownloadListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity implements OnClickListener {

WebView wv;
Button back;
Button refresh;
TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wv = (WebView) findViewById(R.id.wv);
back = (Button) findViewById(R.id.bt_back);
refresh = (Button) findViewById(R.id.bt_refresh);
tv = (TextView) findViewById(R.id.tv);

wv.loadUrl("http://111.1.62.72/files/4105000000342E31/dl.ops.baidu.com/appsearch_AndroidPhone_1426l.apk");

wv.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
tv.setText(title);
super.onReceivedTitle(view, title);
}
});
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}

@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
view.loadUrl("file:///android_asset/error.html");
}
});
wv.setDownloadListener(new DownloadListener() {

@Override
public void onDownloadStart(String url, String userAgent,
String contentDisposition, String mimetype, long contentLength) {
if (url.endsWith(".apk")) {
Uri uri = Uri.parse(url);
Intent i = new Intent(Intent.ACTION_VIEW,uri);
startActivity(i);
}
}
});

back.setOnClickListener(this);
refresh.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_back:
finish();
break;
case R.id.bt_refresh:
wv.reload();
break;

default:
break;
}
}

}
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.mkk.webviewdemo.MainActivity" >

    <RelativeLayout
        android:id="@+id/rl"
        android:layout_width="match_parent"
        android:layout_height="50dp" >

        <Button
            android:id="@+id/bt_back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="返回" />

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_toRightOf="@+id/bt_refresh"
            android:text="http://www.baidu.com" />

        <Button
            android:id="@+id/bt_refresh"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:text="刷新" />
    </RelativeLayout>

    <WebView
        android:id="@+id/wv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/rl"
        android:layout_marginTop="5dp" />

</RelativeLayout>
效果图

3.WebView常用相关方法

WebView常用方法:
getSettings()
返回一个WebSettings对象,用来控制WebView的属性设置
loadUrl(String url)
加载指定的UrlloadData(String data,String mimeType,String encoding)
 加载指定的Data到WebView中.使用"data:"作为标记头,
改方法不能加载网络数据.其中mimeType为数据类型如:textml,image/jpeg. 
encoding为字符的编码方式 
setWebViewClient(WebViewClient client)
为WebView指定一个WebViewClient对象.WebViewClient可
以辅助WebView处理各种通知,请求等事件。
setWebChromeClient(WebChromeClient client)
为WebView指定一个WebChromeClient对象,WebChromeClient专门用来辅助WebView处理js的对话框,网站title,网站图标,加载进度条等
WebSettings的常用方法:
setJavaScriptEnabled(boolean flag)
设置是否支持JavaScript
setDefaultFontSize(int size)
设置默认的字体大小setDefaultTextEncodingName(String encoding)
设置默认字符的编码方式
setAllowFileAccess(boolean allow):
设置是否允许访问文件数据
setDatabaseEnabled(boolean flag)
设置是否可以使用数据库相关的api
setDatabasePath(String databasePath)若使用数据库API,该方法指定数据库文件的路径setBlockN etworkImage(boolean flag)设置是否禁止显示图片,true表示禁止图片setSavePassword(boolean save)设置是否保存密码setTextize(WebSetting.TextSize)设置页面文字大小setSupportZoom(bollean support)设置是否支持变焦

WebViewClient的常用方法

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)
遇到不可恢复的错误信息时调用

WebChromeClient的常用方法:

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)
当加载进度条发生改变时调用

1 0
原创粉丝点击