让python在android系统上飞一会儿:第四节 使用WebView制作程序界面
2011-07-26 16:42 铁骑(PuLee) 阅读(782) 评论(0) 编辑 收藏 举报介绍
SL4A r1 版本引入了内置的HTML编译器和控制WebView的api。
UiFacade模块也提供了一系列直接操作对话框和菜单的方法。想了解更多信息,请参考Ui Help部分的介绍。
使用 WebView
API 中的webViewShow(url)方法是用来使用WebView打开给定URI对应的自定义HTML页面(当然也可以使用file://形式的URI)。WebView为他所有支持的语言提供基本一样的android类。
1
|
var droid = new Android(); |
不过与在其他语言中不同的是,Android类在WebView中提供了一个额外的方法 registerCallback():
1
|
droid.registerCallback( "event_name" , function(data) { alert(data); }); |
这个特定的回调函数会在指定名称的事件(event_name)抛出时被调用,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
< html > < head > < title >Sensor Monitor</ title > </ head > < body > < div >X-Force: < div id = "xforce" style = "display: inline;" /></ div > < div >Y-Force: < div id = "yforce" style = "display: inline;" /></ div > < div >Z-Force: < div id = "zforce" style = "display: inline;" /></ div > < script > var droid = new Android(); var display = function(data) { document.getElementById("xforce").innerHTML = data.data.xforce; document.getElementById("yforce").innerHTML = data.data.yforce; document.getElementById("zforce").innerHTML = data.data.zforce; } droid.startSensing(); droid.registerCallback("sensors", display); </ script > </ body > </ html > |
使用WebView并不需要使用另一种后台语言,HTML解释器使用执行Python脚本的方式执行HTML文件(就像上面的代码)。
如果想使用python语言调用WebView,可以通过事件来解决WebView和调用语言间的相互沟通问题。无论是python发出的事件或者WebView中js发出的事件,都可以被另一方接收处理。
使用python响应js抛出的事件
让我们先来看一个用纯JS写的例子。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< html > < head > < title >Text to Speech</ title > < script > var droid = new Android(); var speak = function() { droid.ttsSpeak(document.getElementById("say").value); } </ script > </ head > < body > < form onsubmit = "speak(); return false;" > < label for = "say" >What would you like to say?</ label > < input type = "text" id = "say" /> < input type = "submit" value = "Speak" /> </ form > </ body > </ html > |
在文本框中输入文本并点击提交按钮,将会调用TTS API中的方法将文本框中内容读出来。将上面的代码保存到文件中,并命名为text_to_speech.html。现在我们使用python脚本调用WebView打开这个文件。python代码如下:
1
2
3
|
import android droid = android.Android() droid.webViewShow( 'file:///sdcard/sl4a/scripts/text_to_speech.html' ) |
运行这个Python脚本将会在WebView中打开text_to_speech.html文件。当然,WebView会保持打开,就像之前一样工作。
现在我们修改HTML中的内容,使他可以出发一个事件,并在python中进行处理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< html > < head > < title >Text to Speech</ title > < script > var droid = new Android(); var speak = function() { droid.postEvent("say", document.getElementById("say").value); } </ script > </ head > < body > < form onsubmit = "speak(); return false;" > < label for = "say" >What would you like to say?</ label > < input type = "text" id = "say" /> < input type = "submit" value = "Speak" /> </ form > </ body > </ html > |
我们也需要修改python中的部分代码,如下所示:
1
2
3
4
5
6
|
import android droid = android.Android() droid.webViewShow( 'file:///sdcard/sl4a/scripts/text_to_speech.html' ) while True : result = droid.waitForEvent( 'say' ).result droid.ttsSpeak(result[ 'data' ]) |
这个代码片段演示了python脚本是如何等待并处理js脚本触发的“say”事件。当一个“say”事件到达时,python将会使用TTS API中的方法将随事件传递的数据读出来。
本文主要翻译自:http://code.google.com/p/android-scripting/wiki/UsingWebView
欢迎加入豆瓣SL4A小组一起讨论进步: 豆瓣SL4A小组 (http://www.douban.com/group/SL4A/)
文章转载自:铁骑世界(http://cooleep.com/)
文章名称:使用python开发android应用程序:第四节 使用WebView制作程序界面
想就本文内容同作者进行深入讨论?请在作者的微博留言:http://t.sina.com.cn