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

webview相关的知识

2015-01-07 14:12 302 查看
工作中用到了webview 下面把webview相关的知识进行一下总结:

首先要在manifest.main文件中创建一个webview,然后再activity中定义这个webview然后进行一下相关操作。

1、添加权限:AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web pagenot available错误。

2、在要Activity中生成一个WebView组件:WebView webView = newWebView(this);

3、设置WebView基本信息:

如果访问的页面中有Javascript,则webview必须设置支持Javascript。

webview.getSettings().setJavaScriptEnabled(true);

触摸焦点起作用

requestFocus();

取消滚动条

this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);

4如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。给WebView添加一个事件监听对象(WebViewClient)并重写其中的一些方法 shouldOverrideUrlLoading:对网页中超链接按钮的响应。 当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url

onLoadResource

onPageStart

onPageFinish

onReceiveError

onReceivedHttpAuthRequest

5、如果访问的页面中有Javascript,则webview必须设置支持Javascript ,否则显示空白页面。

Java代码

webview.getSettings().setJavaScriptEnabled(true);

6、如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象:

Java代码

1. mWebView.setWebViewClient(new WebViewClient(){

2. public boolean shouldOverrideUrlLoading(WebView view, String url) {

3. view.loadUrl(url);

4. return true;

5. }

6. });

上述方法告诉系统由我这个WebViewClient处理这个Intent,我来加载URL。点击一个链接的Intent是向上冒泡的,shouldOverrideUrlLoading方法return
true表示我加载后这个Intent就消费了,不再向上冒泡了。

7、如果不做任何处理,在显示你的Brower UI时,点击系统“Back”键,整个Browser会作为一个整体“Back"到其他Activity中,而不是希望的在Browser的历史页面中 Back。如果希望实现在历史页面中Back,需要在当前Activity中处理并消费掉该Back事件:

Java代码

1. public boolean onKeyDown(int keyCode, KeyEvent event) {

2. if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {

3. mWebView.goBack();

4. return true;

5. }

6. return super.onKeyDown(keyCode, event);

7. }

对于Android 2.0开始又多出了一种新的方法,对于Activity 可以单独获取Back键的按下事件,直接重写
onBackPressed 方法即可,代码如下

Java代码

@Override

1、public void onBackPressed()
{

2、 // 这里处理逻辑代码,该方法仅适用于2.0或更高版本的sdk

3、 return ;

4、}

这里还有几个知识点:

1)为了让WebView从apk文件中加载 assets,Android SDK提供了一个schema,前缀为"file:///android_asset/"。WebView遇到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"

2)addJavascriptInterface方法中要绑定的 Java对象及方法要运行另外的线程中,不能运行在构造他的线程中,这也是使用Handler的目的。

Webview的两种显示网页的方法:

(1):webview.loadUrl(“www.baidu.com”);

public class WebviewTest extendsActivity
{

/** Called whenthe activity is first created.
*/

private WebView mWebView;

private Button bt1;

public void onCreate(Bundle
savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mWebView =(WebView)findViewById(R.id.webview);

WebSettings webSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);

bt1 =
(Button)findViewById(R.id.Button01);

bt1.setOnClickListener(new View.OnClickListener()
{

public voidonClick(View
arg0) {

// TODO Auto-generated
method stub

webview.loadUrl(“www.baidu.com”);

}

});

}

}

(2):自定义网页:Webview.data();

public class WebviewTest extendsActivity
{

/** Called whenthe activity is first created.
*/

private WebView mWebView;

private Button bt1;

public void onCreate(Bundle
savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mWebView =(WebView)findViewById(R.id.webview);

WebSettings webSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);

bt1 =
(Button)findViewById(R.id.Button01);

bt1.setOnClickListener(new View.OnClickListener()
{

public voidonClick(View
arg0) {

// TODO Auto-generated
method stub

Stringstr = "asdas";

mWebView.loadData(

"<html><body>"+str+"</body></html>",

"text/html", "utf-8");

}

});

}

}

Webview的常用方法实例:

Manifest.xml中的代码:

加入权限:

<uses-permission android:name="android.permission.INTERNET" />

布局文件中的代码:

<?xml version="1.0"encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="fill_parent"

android:layout_height="fill_parent">

<WebView android:id="@+id/WebView01" android:layout_width="fill_parent"

android:layout_height="fill_parent"></WebView>

</LinearLayout>

TestWebviewDemo中的代码:

public class TestWebviewDemo extends Activity
{

/** Calledwhen the activity is first
created. */

privatestatic finalString TAG = "TestWebviewDemo";

privateWebView mWebView;

privateHandler mHandler = new Handler();

privateint mDensity;

publicvoid onCreate(BundlesavedInstanceState)
{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mWebView=
(WebView) findViewById(R.id.WebView01);

mWebView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据

mWebView.getSettings().setBuiltInZoomControls(true);// 设置支持缩放

mWebView.getSettings().setSavePassword(false); // 设置是否保存密码

//设置支持JavaScript脚本

mWebView.getSettings().setJavaScriptEnabled(true);

// 设置支持各种不同的设备

mWebView

.getSettings()

.setUserAgentString(

"Mozilla/5.0
(iPad; U; CPU OS 3_2 like Mac OS X;en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334bSafari/531.21.10");

//通过这个设置来执行加载webview网页时所要执行的一些方法

mWebView.setWebViewClient(new WebViewClient()
{

// 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示

public booleanshouldOverrideUrlLoading(WebView
view, String url) {

// TODO Auto-generated
method stub

// 当有新连接时使用当前的webview进行显示

view.loadUrl(url);

return super.shouldOverrideUrlLoading(view,url);

}

// 开始加载网页时要做的工作

public voidonPageStarted(WebView
view, String url, Bitmap favicon) {

super.onPageStarted(view,
url, favicon);

}

//加载完成时要做的工作

public voidonPageFinished(WebView
view, String url) {

super.onPageFinished(view,
url);

}

// 加载错误时要做的工作

public voidonReceivedError(WebView
view, interrorCode,

Stringdescription, String failingUrl) {

Log.d(TAG, "error="+
description);

Toast.makeText(TestWebviewDemo.this,

errorCode+ "/" +
description, Toast.LENGTH_LONG)

.show();

}

});

//处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)

mWebView.setWebChromeClient(new WebChromeClient()
{

// 对话框

public booleanonJsAlert(WebView
view, String url, String message,

final JsResult
result) {

// 构建一个Builder来显示网页中的alert对话框

Builderbuilder = newBuilder(TestWebviewDemo.this);

builder.setTitle("提示对话框");

builder.setMessage(message);

builder.setPositiveButton(android.R.string.ok,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

result.confirm();

}

});

builder.setCancelable(false);

builder.create();

builder.show();

return true;

}

// 带按钮的对话框

public booleanonJsConfirm(WebView
view, String url,

Stringmessage, final JsResult
result) {

Builderbuilder = newBuilder(TestWebviewDemo.this);

builder.setTitle("带选择的对话框");

builder.setMessage(message);

builder.setPositiveButton(android.R.string.ok,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

result.confirm();

}

});

builder.setNeutralButton(android.R.string.cancel,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

result.cancel();

}

});

builder.setCancelable(false);

builder.create();

builder.show();

return true;

}

// 带输入框的对话框

public booleanonJsPrompt(WebView
view, String url, String message,

StringdefaultValue, final JsPromptResultresult)
{

LayoutInflaterinflater = LayoutInflater

.from(TestWebviewDemo.this);

final View
v = inflater.inflate(R.layout.prom_dialog, null);

// 设置 TextView对应网页中的提示信息

((TextView)v.findViewById(R.id.TextView_PROM))

.setText(message);

// 设置EditText对应网页中的输入框

((EditText)v.findViewById(R.id.EditText_PROM))

.setText(defaultValue);

Builderbuilder = newBuilder(TestWebviewDemo.this);

builder.setTitle("带输入的对话框");

builder.setView(v);

builder.setPositiveButton(android.R.string.ok,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

Stringvalue = ((EditText) v

.findViewById(R.id.EditText_PROM))

.getText().toString();

result.confirm(value);

}

});

builder.setNegativeButton(android.R.string.cancel,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

result.cancel();

}

});

builder

.setOnCancelListener(new DialogInterface.OnCancelListener()
{

@Override

public voidonCancel(DialogInterface
dialog) {

// TODO Auto-generated
method stub

result.cancel();

}

});

builder.create();

builder.show();

return true;

}

// 设置网页加载的进度条

public voidonProgressChanged(WebView
view, intnewProgress)
{

TestWebviewDemo.this.getWindow().setFeatureInt(

Window.FEATURE_PROGRESS,
newProgress * 100);

super.onProgressChanged(view,
newProgress);

}

// 设置应用程序的标题

public voidonReceivedTitle(WebView
view, String title) {

TestWebviewDemo.this.setTitle(title);

super.onReceivedTitle(view,
title);

}

});

// 与网页进行交互的addJavascriptInterface()的方法

mWebView.addJavascriptInterface(new Object()
{

public voidclickOnAndroid(final String
str){

mHandler.post(newRunnable()
{

@Override

public voidrun()
{

// 逻辑代码

});

}

}, "demo");

if(mDensity ==
240) { //可以让不同的density的情况下,可以让页面进行适配

mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);

} elseif (mDensity==
160) {

mWebView.getSettings().setDefaultZoom(ZoomDensity.MEDIUM);

} else{

mWebView.getSettings().setDefaultZoom(ZoomDensity.CLOSE);

}

String strUrl = "http://10.0.2.2:8080/WebTest3";

mWebView.loadUrl(strUrl);

}

//处理返回的事件,(后退进入前一个界面而不是全部退出)

@Override

publicboolean onKeyDown(int keyCode,
KeyEvent event) {

if(keyCode
== KeyEvent.KEYCODE_BACK&& mWebView.canGoBack())
{

mWebView.goBack();// 返回前一个页面

return true;

}

returnsuper.onKeyDown(keyCode,
event);

}

Webview中java与网页进行数据交互:

先看我们的html文档:

<html>

<script language="javascript">

/* This function is invoked by the activity */

function wave() {

alert("1");

document.getElementById("droid").src="android_waving.png";

alert("2");

}

</script>

<body>

<!-- Calls into the javascript interface for the activity -->

//js调用Java方法

<a><divstyle="width:80px;

margin:0px auto;

padding:10px;

text-align:center;

border:2px solid #202020;" >

<img id="droid"src="android_normal.png"/><br>

Click me!

</div></a>

</body>

</html>

Manifest.Xml中:

加入权限:

<uses-permission android:name="android.permission.INTERNET" />

再看我们的java 代码。

Java代码

public class WebViewDemo extends Activity{

private static final String LOG_TAG = "WebViewDemo";

private WebView mWebView;

private Handler mHandler = new Handler();

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

mWebView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = mWebView.getSettings();

webSettings.setSavePassword(false);

webSettings.setSaveFormData(false);

webSettings.setJavaScriptEnabled(true);

webSettings.setSupportZoom(false);

mWebView.setWebChromeClient(new MyWebChromeClient());

//自定义的Demo,供js网页调用

mWebView.addJavascriptInterface(new DemoJavaScriptInterface(),"demo");

mWebView.loadUrl("file:///android_asset/demo.html");

}

final class DemoJavaScriptInterface {

DemoJavaScriptInterface() {

}

/**

* This is not called on the UI thread. Post a runnable to invoke

* loadUrl on the UI thread.

*/

public void clickOnAndroid() {

//用handler来更新UI

mHandler.post(new Runnable() {

public void run() {

//Java调用js方法

mWebView.loadUrl("javascript:wave()");

}

});

}

}

/**

* Provides a hook for calling "alert" from javascript. Usefulfor

* debugging your javascript.

*/

final class MyWebChromeClient extends WebChromeClient {

@Override

public boolean onJsAlert(WebView view, String url, String message,JsResult result) {

Log.d(LOG_TAG, message);

result.confirm();

return true;

}

}

}

再看个例子:

Html中的代码:

<script type="text/JavaScript">

functions(){

alert("Good Morning!");

}

functiond(){

confirm("Are you ok?")

}

functionf(){

prompt("What’s yourname?")

}

</script>

</head>

<body>

<body>

下面我们演示三种对话框

<br/><br/>

<inputtype="button" value="警告,提醒对话框" onclick="s()">

<br/><br/>

<inputtype="button" value="带选择的对话框" onclick="d()">

<br/><br/>

<inputtype="button" value="要求用户输入的对话框" onclick="f()">

</body>

Manifest.Xml中:

加入权限:

<uses-permission android:name="android.permission.INTERNET" />

Java中的代码:

public class Test extendsActivity
{

/** Called whenthe activity is first created.
*/

privateEditText et = null;

privateButton btn = null;

privateWebView wv = null;

privateWebSettings ws = null;

@Override

publicvoid onCreate(BundlesavedInstanceState)
{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

et =(EditText) this.findViewById(R.id.EditText01);

btn=
(Button) this.findViewById(R.id.Button01);

wv =(WebView) this.findViewById(R.id.WebView);

ws =wv.getSettings();

ws.setAllowFileAccess(true);//设置允许访问文件数据

ws.setJavaScriptEnabled(true);//设置支持javascript脚本

ws.setBuiltInZoomControls(true);//设置支持缩放

wv.requestFocus();

wv.setWebViewClient(new WebViewClient(){

publicbooleanshouldOverrideUrlLoading(WebView
view,String url){

//当有新连接时,使用当前的 WebView

view.loadUrl(url);

returntrue;

}

});

wv.setWebChromeClient(new WebChromeClient(){

publicboolean onJsAlert(WebView
view,Stringurl,String message,final JsResultresult){

//构建一个Builder来显示网页中的alert对话框

Builder builder = new Builder(Test.this);

builder.setTitle("提示对话框");

builder.setMessage(message);

builder.setPositiveButton(android.R.string.ok, newAlertDialog.OnClickListener(){

@Override

publicvoid onClick(DialogInterface
dialog, int which)
{

// TODO Auto-generated
method stub

result.confirm();

}

});

builder.setCancelable(false);

builder.create();

builder.show();

returntrue;

}

publicboolean onJsConfirm(WebViewview,String
url,String message,finalJsResult
result){

Builder builder = new Builder(Test.this);

builder.setTitle("带选择的对话框");

builder.setMessage(message);

builder.setPositiveButton(android.R.string.ok,newAlertDialog.OnClickListener(){

@Override

publicvoid onClick(DialogInterface
dialog, int which)
{

// TODO Auto-generated
method stub

result.confirm();

}

});

builder.setNeutralButton(android.R.string.cancel, newAlertDialog.OnClickListener(){

@Override

publicvoid onClick(DialogInterface
dialog, int which)
{

// TODO Auto-generated
method stub

result.cancel();

}

});

builder.setCancelable(false);

builder.create();

builder.show();

returntrue;

}

publicboolean onJsPrompt(WebViewview,String
url,String message,String defaultValue,finalJsPromptResult
result){

LayoutInflater inflater =LayoutInflater.from(Test.this);

finalView
v = inflater.inflate(R.layout.prom_dialog,null);

//设置 TextView对应网页中的提示信息

((TextView)v.findViewById(R.id.TextView_PROM)).setText(message);

//设置EditText对应网页中的输入框

((EditText)v.findViewById(R.id.EditText_PROM)).setText(defaultValue);

Builder builder = new Builder(Test.this);

builder.setTitle("带输入的对话框 ");

builder.setView(v);

builder.setPositiveButton(android.R.string.ok,newAlertDialog.OnClickListener(){

@Override

publicvoid onClick(DialogInterface
dialog, int which)
{

// TODO Auto-generated
method stub

String value =((EditText)v.findViewById(R.id.EditText_PROM)).getText().toString();

result.confirm(value);

}

});

builder.setNegativeButton(android.R.string.cancel,newAlertDialog.OnClickListener(){

@Override

publicvoid onClick(DialogInterface
dialog, int which)
{

// TODO Auto-generated
method stub

result.cancel();

}

});

builder.setOnCancelListener(new DialogInterface.OnCancelListener(){

@Override

publicvoid onCancel(DialogInterface
dialog){

// TODO Auto-generated
method stub

result.cancel();

}

});

builder.create();

builder.show();

returntrue;

}

//设置网页加载的进度条

publicvoid onProgressChanged(WebView
view,int newProgress){

Test.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
newProgress*100);

super.onProgressChanged(view,newProgress);

}

//设置应用程序的标题

publicvoid onReceivedTitle(WebViewview,String
title){

Test.this.setTitle(title);

super.onReceivedTitle(view,title);

}

});

btn.setOnClickListener(new Button.OnClickListener(){

@Override

publicvoid onClick(View
v) {

// TODOAuto-generated
method stub

String url =et.getText().toString();

// Stringurl = "http://10.0.2.2:8080/WebTest3";

//判断输入的内容是不是网址

if(URLUtil.isNetworkUrl(url)){

Log.d("++++++++++++","sadas");

wv.loadUrl(url);

Toast.makeText(Test.this,
url, Toast.LENGTH_SHORT).show();

}else{

et.setHint("输入的网址不合法,请重新输入");

// et.setText("输入的网址不合法,请重新输入");

}

}

});

}

@Override

publicboolean onKeyDown(int keyCode,
KeyEvent event) {

if(keyCode==KeyEvent.KEYCODE_BACK && wv.canGoBack()){

wv.goBack();//返回前一个页面

returntrue;

}

returnsuper.onKeyDown(keyCode,
event);

}

}

需要注意的地方,很多数据类型js中不认识,最好是在android那边封装好,提供必要的方法接口。比如传到js中的list,在js中是没办法去得到里面的元素的。

Manifest.Xml中:

加入权限:

<uses-permission android:name="android.permission.INTERNET" />

html的带码

<script language="javascript">

window.onload= function(){

vari=window.javatojs.getSize();

for(varn=0;n<i;n++){

var jsdata=window.javatojs.getObject(n);//拿到activity里面的属性javadata

var datalistdiv = document.getElementById("datalist"); //得到页面的div

pnode = document.createElement("p");//创建一个p标签,再建个textnode

tnode = document.createTextNode(jsdata);

pnode.appendChild(tnode);//p中加入数据

datalistdiv.appendChild(pnode);//div中键入新的p

}

}

</script>

<body>

<div id = "datalist">

this is a demo

</body>

Java的代码:

public class JavaToWebview extends Activity{

private WebView web;

public List list;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

initData();

setContentView(R.layout.webview);

web = (WebView)this.findViewById(R.id.webview);

web.getSettings().setJavaScriptEnabled(true);//开启javascript设置

web.addJavascriptInterface(this, "javatojs");//把RIAExample的一个实例添加到js的全局对象window中, //这样就可以使用window.javatojs来调用它的方法

web.loadUrl("file:///android_asset/demo5.html");//加载网页

}

void initData(){

list=newArrayList<String>();

for(int i=0;i<5;i++){

list.add("我是从数据库中读取的哈哈");

}

}

/**

* 该方法将在js脚本中,通过window.javatojs.....()进行调用

* @return

*/

public Object getObject(int index){

return list.get(index);

}

public int getSize(){

return list.size();

}

}

再看一个查地图的例子:

Manifest.Xml中:

加入权限:

<uses-permission android:name="android.permission.INTERNET" />

布局文件中的代码:

<?xml version="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Welcome to Mr Wei's Blog."

/>

<WebView

android:id="@+id/webview"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<Button

android:id="@+id/button"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Change the webview content"

/>

</LinearLayout>

在assets目录下新建一个demo.html文件,代码如下:

<html>

<scriptlanguage="javascript"><!--

function fillContent(){

document.getElementById("content").innerHTML =

"This Content is showedby Android invoke Javascript function.";

}

// --></script>

<body>

<p><ahref="">Start GoogleMap</a></p>

<p id="content"></p>

<p>A Demo ----Android and Javascript invoke eachother.</p>

<p>Author:Frankiewei</p>

</body>

</html>

activity代码:

public class WebViewDemo extends Activity{

private WebView mWebView;

private Button mButton;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

setupViews();

}

//初始化

private void setupViews() {

mWebView = (WebView) findViewById(R.id.webview);

WebSettings mWebSettings =mWebView.getSettings();

//加上这句话才能使用javascript方法

mWebSettings.setJavaScriptEnabled(true);

//增加接口方法,让html页面调用

mWebView.addJavascriptInterface(new Object() {

//这里我定义了一个打开地图应用的方法

public void startMap() {

Intent mIntent = newIntent();

ComponentName component = newComponentName(

"com.google.android.apps.maps",

"com.google.android.maps.MapsActivity");

mIntent.setComponent(component);

startActivity(mIntent);

}

}, "demo");

//加载页面

mWebView.loadUrl("file:///android_asset/demo.html");

mButton = (Button) findViewById(R.id.button);

//给button添加事件响应,执行JavaScript的fillContent()方法

mButton.setOnClickListener(new Button.OnClickListener() {

public void onClick(View v) {

mWebView.loadUrl("javascript:fillContent()");

}

});

}

}

其他例子如下:(activity中获取js界面输入框的值)

Jsp中的代码:

<body>

<form action="" method="post">

宝宝预产期:<br>

<select id="shijian" name="date">

<optionvalue="2006">2006</option>

<optionvalue="2007">2007</option>

<optionvalue="2008">2008</option>

<optionvalue="2009">2009</option>

<optionvalue="2010">2010</option>

</select><br>

常用邮箱号:

<input id="email" type="text" name="emailID" />

<br>

宝宝昵称:

<input id="name" type="text" name="username" />

<br>

宝宝性别:<br>

<input id="men" type="radio" name="sex" value="men"/>男

<inputid="women" type="radio" name="sex" value="women"/>女

<br>

<inputtype="submit" value="注册"

onclick="f()"/>

<input type="button" value="取消" />

</form>

</body>

<script type="text/JavaScript"language="javascript">

functionf(){

var email= document.getElementById('email').value;

var name
=document.getElementById('name').value;

var date
=document.getElementById('shijian').value;

if(document.getElementById('men').checked
&&!document.getElementById('women').checked){

var sex= document.getElementById('men').value;

}elseif(!document.getElementById('men').checked
&&document.getElementById('women').checked){

var sex= document.getElementById('women').value;

}

window.demo.clickOnAndroid(date+"|"+email+"|"+name+"|"+sex);

}

</script>

Manifest.xml中的代码:

<?xml version="1.0"encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.ruixin.login"android:versionCode="1" android:versionName="1.0">

<applicationandroid:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".TestWebviewDemo" android:label="@string/app_name">

<intent-filter>

<actionandroid:name="android.intent.action.MAIN" />

<categoryandroid:name="android.intent.category.LAUNCHER"/>

</intent-filter>

<intent-filter>

<dataandroid:mimeType="vnd.android.cursor.dir/vnd.ruixin.login"/>

</intent-filter>

<intent-filter>

<dataandroid:mimeType="vnd.android.cursor.item/vnd.ruixin.login"/>

</intent-filter>

</activity>

<provider android:name="MyProvider" android:authorities="com.ruixin.login" />

</application>

<uses-sdk android:minSdkVersion="8" />

<uses-permissionandroid:name="android.permission.INTERNET" />

<uses-permissionandroid:name="android.permission.READ_CONTACTS"></uses-permission>

</manifest>

布局文件中的代码:

<?xml version="1.0"encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"android:layout_width="fill_parent"

android:layout_height="fill_parent">

<WebView android:id="@+id/WebView01" android:layout_width="fill_parent"

android:layout_height="fill_parent"></WebView>

</LinearLayout>

TestWebviewDemo中的代码:

public class TestWebviewDemo extends Activity
{

/** Calledwhen the activity is first
created. */

privatestatic finalString TAG = "TestWebviewDemo";

privateWebView mWebView;

privateHandler mHandler = new Handler();

privateint mDensity;

publicvoid onCreate(BundlesavedInstanceState)
{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mWebView=
(WebView) findViewById(R.id.WebView01);

mWebView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据

mWebView.getSettings().setBuiltInZoomControls(true);// 设置支持缩放

mWebView.getSettings().setSavePassword(false); // 设置是否保存密码

//设置支持JavaScript脚本

mWebView.getSettings().setJavaScriptEnabled(true);

// 设置支持各种不同的设备

mWebView

.getSettings()

.setUserAgentString(

"Mozilla/5.0
(iPad; U; CPU OS 3_2 like Mac OS X;en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334bSafari/531.21.10");

//通过这个设置来执行加载webview网页时所要执行的一些方法

mWebView.setWebViewClient(new WebViewClient()
{

// 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示

public booleanshouldOverrideUrlLoading(WebView
view, String url) {

// TODO Auto-generated
method stub

// 当有新连接时使用当前的webview进行显示

view.loadUrl(url);

return super.shouldOverrideUrlLoading(view,url);

}

// 开始加载网页时要做的工作

public voidonPageStarted(WebView
view, String url, Bitmap favicon) {

super.onPageStarted(view,url,
favicon);

}

//加载完成时要做的工作

public voidonPageFinished(WebView
view, String url) {

super.onPageFinished(view,
url);

}

// 加载错误时要做的工作

public voidonReceivedError(WebView
view, interrorCode,

Stringdescription, String failingUrl) {

Log.d(TAG, "error="+
description);

Toast.makeText(TestWebviewDemo.this,

errorCode+ "/" +
description, Toast.LENGTH_LONG)

.show();

}

});

//处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)

mWebView.setWebChromeClient(new WebChromeClient()
{

// 对话框

public booleanonJsAlert(WebView
view, String url, String message,

final JsResult
result) {

// 构建一个Builder来显示网页中的alert对话框

Builderbuilder = newBuilder(TestWebviewDemo.this);

builder.setTitle("提示对话框");

builder.setMessage(message);

builder.setPositiveButton(android.R.string.ok,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

result.confirm();

}

});

builder.setCancelable(false);

builder.create();

builder.show();

return true;

}

// 带按钮的对话框

public booleanonJsConfirm(WebView
view, String url,

Stringmessage, final JsResult
result) {

Builderbuilder = newBuilder(TestWebviewDemo.this);

builder.setTitle("带选择的对话框");

builder.setMessage(message);

builder.setPositiveButton(android.R.string.ok,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

result.confirm();

}

});

builder.setNeutralButton(android.R.string.cancel,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

result.cancel();

}

});

builder.setCancelable(false);

builder.create();

builder.show();

return true;

}

// 带输入框的对话框

public booleanonJsPrompt(WebView
view, String url, String message,

StringdefaultValue, final JsPromptResultresult)
{

LayoutInflaterinflater = LayoutInflater

.from(TestWebviewDemo.this);

final View
v = inflater.inflate(R.layout.prom_dialog, null);

// 设置 TextView对应网页中的提示信息

((TextView)v.findViewById(R.id.TextView_PROM))

.setText(message);

// 设置EditText对应网页中的输入框

((EditText)v.findViewById(R.id.EditText_PROM))

.setText(defaultValue);

Builderbuilder = newBuilder(TestWebviewDemo.this);

builder.setTitle("带输入的对话框");

builder.setView(v);

builder.setPositiveButton(android.R.string.ok,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

Stringvalue = ((EditText) v

.findViewById(R.id.EditText_PROM))

.getText().toString();

result.confirm(value);

}

});

builder.setNegativeButton(android.R.string.cancel,

new AlertDialog.OnClickListener()
{

@Override

public voidonClick(DialogInterface
dialog,

int which)
{

// TODO Auto-generated
method stub

result.cancel();

}

});

builder

.setOnCancelListener(new DialogInterface.OnCancelListener()
{

@Override

public voidonCancel(DialogInterface
dialog) {

// TODO Auto-generated
method stub

result.cancel();

}

});

builder.create();

builder.show();

return true;

}

// 设置网页加载的进度条

public voidonProgressChanged(WebView
view, intnewProgress)
{

TestWebviewDemo.this.getWindow().setFeatureInt(

Window.FEATURE_PROGRESS,
newProgress * 100);

super.onProgressChanged(view,
newProgress);

}

// 设置应用程序的标题

public voidonReceivedTitle(WebView
view, String title) {

TestWebviewDemo.this.setTitle(title);

super.onReceivedTitle(view,
title);

}

});

// 与网页进行交互的addJavascriptInterface()的方法

mWebView.addJavascriptInterface(new Object()
{

public voidclickOnAndroid(final String
str){

mHandler.post(newRunnable()
{

@Override

public voidrun()
{

StringTokenizerstringTokenizer = newStringTokenizer(

str,"|");

date =
stringTokenizer.nextToken();

email =
stringTokenizer.nextToken();

username =
stringTokenizer.nextToken();

sex =
stringTokenizer.nextToken();

//将数据出入数据库

dBlite1.add(email,username,date,sex);

// 用contentResolver访问存入到contentprovider中的数据

contentResolver = TestWebviewDemo.this

.getContentResolver();

Log.d("++++",
RuiXin.CONTENT_URI.toString());

Cursorcursor = contentResolver.query(

RuiXin.CONTENT_URI, newString[]
{

RuiXin.EMAIL,
RuiXin.USERNAME,

RuiXin.DATE,RuiXin.SEX}, null, null,null);

Log.d("@@@----",
cursor.toString());

//
startManagingCursor(cursor);

while (cursor.moveToNext())
{

Toast.makeText(

TestWebviewDemo.this,

cursor.getString(cursor.getColumnIndex(RuiXin.EMAIL))

+"
"

+cursor.getString(cursor

.getColumnIndex(RuiXin.USERNAME))

+"
"

+cursor.getString(cursor

.getColumnIndex(RuiXin.DATE))

+ "
"

+ cursor.getString(cursor

.getColumnIndex(RuiXin.SEX)),

Toast.LENGTH_SHORT).show();

}

startManagingCursor(cursor); //关闭游标

}

});

}

}, "demo");

if(mDensity ==
240) { //可以让不同的density的情况下,可以让页面进行适配

mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);

} elseif (mDensity==
160) {

mWebView.getSettings().setDefaultZoom(ZoomDensity.MEDIUM);

} else{

mWebView.getSettings().setDefaultZoom(ZoomDensity.CLOSE);

}

String strUrl = "http://10.0.2.2:8080/WebTest3";

mWebView.loadUrl(strUrl);

}

//处理返回的事件,(后退进入前一个界面而不是全部退出)

@Override

publicboolean onKeyDown(int keyCode,
KeyEvent event) {

if(keyCode
== KeyEvent.KEYCODE_BACK&& mWebView.canGoBack())
{

mWebView.goBack();// 返回前一个页面

return true;

}

returnsuper.onKeyDown(keyCode,
event);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: