python-for-android

This is Python built to run on Android devices. It is made t ...

↑我也要推荐

使用 python 开发 android 应用程序:第四节 使用 WebView 制作程序界面

发布时间:2011-06-24 11:01:23, 关注:+9265, 赞美:+9, 不爽:+8

本文标签: android

介绍

SL4A r1 版本介绍了内置的HTML编译器和控制WebView的api。
UiFacade模块也提供了一系列直接操作对话框和菜单的方法。了解更多信息请参看Ui Help部分的介绍。

使用 WebView

API 中的webViewShow(url)方法是用来使用WebView打开指定URI地址对应的自定义HTML页面(也可以使用file://形式的URI)。WebViews为他所有支持的语言提供同样类似的android类。

var droid = new Android(); 

不过与在其他语言中不同的是,Android类在WebView中提供了一个额外的方法 registerCallback():

droid.registerCallback("event_name", function(data) { alert(data); }); 

这个特定的回调函数会在指定名称的事件(event_name)抛出时被调用,例如:

<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抛出的事件

Let’s start with a simple example that’s written in pure JavaScript:

<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代码如下:

import android
droid = android.Android()

运行这个Python脚本将会在WebView中打开text_to_speech.html文件。当然,WebView会保持打开,就像之前一样工作。

现在我们修改HTML中的内容,使他可以出发一个时间,并在python中进行处理:

<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中的部分代码,如下所示:

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://cooleep.com/)
文章名称:使用python开发android应用程序:第四节 使用WebView制作程序界面
想就本文内容同作者进行深入讨论?请在作者的微博留言:http://t.sina.com.cn/tieji2pulee

 

如果你觉得本站对你有帮助,欢迎向本站赞助 :P

使用支付宝捐赠

Copyright© Python4cn(news, jobs) simple-is-better.com, 技术驱动:powered by web.py 空间主机:Webfaction

版权申明:文章转载已注明出处,如有疑问请来信咨询。本站为 python 语言推广公益网站,与 python 官方没有任何关系。

联系/投搞/留言: en.simple.is.better@gmail.com 向本站捐赠