fangyong2006 发表于 2013-1-30 04:01:40

ch018 Android webview

<div class="Section0" style="">--------------------------------------------AndroidManifest.xml----------------------------------
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ch18"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="15" />
    <!-- 网络访问权限 -->
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
--------------------------------------------activity_main.xml----------------------------------
<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" >

    <WebView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/wv"
        tools:context=".MainActivity" />
</RelativeLayout>
--------------------------------------------MainActivity.java--------------------------------------
package com.ch18;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
/**
 * 
 * 项目名称:com.ch18    
 * 类名称:MainActivity    
 * 类描述:webview
 * 创建人:方勇   
 * 创建时间:2012-11-20 下午10:10:05   
 * Copyright (c) 方勇-版权所有
 */
public class MainActivity extends Activity {

/* 重写回退按钮 */
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == event.KEYCODE_BACK && wv.canGoBack()) {
wv.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}

/* Android浏览器 */
private WebView wv;

/* 进度条,用户体验 */
private ProgressDialog pdialog;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
init();
setListeners();
showResults();
}

/* 实例化UI */
private void findViews() {
wv = (WebView) findViewById(R.id.wv);
}

/* 初始化数据 */
private void init() {
wv.getSettings().setDefaultTextEncodingName("UTF-8");
// js可用
wv.getSettings().setJavaScriptEnabled(true);
// 滚动样式为无滚动条
wv.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
}

/* 设置监听 */
private void setListeners() {
// 设置url跳转到wenview
wv.setWebViewClient(new MyWebViewClient());
// js处理
wv.setWebChromeClient(new MyWebChromClient());

// html与android交互,android注入到js里面
wv.addJavascriptInterface(new JSInterface(), "a07");
}

/* 显示结果 */
private void showResults() {
pdialog = new ProgressDialog(this);
// pdialog.show();
wv.loadUrl("file:///android_asset/webview.html");
}

/* 显示弹出对话框结果 */
private void showAlertResult(String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("alert");
builder.setMessage(message);
builder.show();
}

/* 处理url跳转 */
final class MyWebViewClient extends WebViewClient {

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
pdialog = ProgressDialog.show(MainActivity.this, null, "load.........");
super.onPageStarted(view, url, favicon);
}

@Override
public void onPageFinished(WebView view, String url) {
pdialog.dismiss();
super.onPageFinished(view, url);
}

@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

super.onReceivedError(view, errorCode, description, failingUrl);
}

}

/* 处理javascript */
final class MyWebChromClient extends WebChromeClient {

@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
super.onJsAlert(view, url, message, result);
if (!message.equals("")) {
showAlertResult(message);
//响应html,已经关闭
result.cancel();
return true;
}
return super.onJsAlert(view, url, message, result);
}

@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
return super.onJsConfirm(view, url, message, result);
}

@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
return super.onJsPrompt(view, url, message, defaultValue, result);
}

}

/* web与android交互 */
final class JSInterface {

private Handler handler = new Handler();
private int flag = 0;

public void onClick() {
handler.post(new Runnable() {
@Override
public void run() {
if (flag == 0) {
wv.loadUrl("javascript:changeImage01()");
flag = 1;
} else {
wv.loadUrl("javascript:changeImage02()");
flag = 0;
}
}
});
}

// 供JS调用
public void logout(String str) {
Log.i("a07", str);
}
}
}
--------------------------------------------效果----------------------------------------------------
http://dl.iteye.com/upload/attachment/0077/1493/e84efd9b-24de-3c04-8284-498397add927.png
页: [1]
查看完整版本: ch018 Android webview