SL4A - 构建 GUI


图形用户界面 (GUI) 表示一组图形组件,使用户能够浏览、访问应用程序功能并与之交互。

用户与 SL4A 交互有两种基本方法,即 -

  • 对话框,如警报

  • 使用 HTML 和 JavaScript 构建 UI,然后使用 Python 在幕后处理任何其他处理。

本章解释了这两种方法。

基于 Python 的 GUI 对话框

SL4A 包含一个 UI 外观,用于访问 android API 提供的基本 UI 元素。这些函数在调用时返回结果对象作为命名元组。每个结果都被分配一个唯一的 ID 以用于跟踪目的。第二个元素是结果。它代表用户的输入。该元组还包括第三个元素错误,以向调用者提供有关可能遇到的任何错误情况的反馈。如果没有遇到错误,则该元素设置为 None。

编号 UiFacade功能及说明
1

对话框获取输入

向用户询问文本输入。

title (String)输入框的标题(默认 = Value)

message (字符串)显示在输入框上方的消息(默认=请输入值:)

defaultText (String)要插入到输入框中的文本(可选)

结果是用户的输入,如果点击取消,则结果为 None (null)。

2

对话框显示

显示对话框

3

对话框创建警报

创建警报对话框。

标题(字符串)(可选)

消息(字符串)(可选)

4

对话框关闭

关闭对话框。

5

对话框创建日期选择器

创建日期选择器对话框。

年份(整数)(默认 = 1970)

月份(整数)(默认 = 1)

天(整数)(默认 = 1)

6

对话框创建时间选择器

创建时间选择器对话框。

小时(整数)(默认 = 0)

分钟(整数)(默认 = 0)

is24hour (布尔值)使用 24 小时制 (默认 = false)

7

对话框获取密码

向用户询问密码。

title (字符串)密码框的标题(默认 = 密码)

message (字符串)显示在输入框上方的消息(默认=请输入密码:)

8

对话框获取响应

返回对话响应。

9

对话框设置正按钮文本

设置警报对话框正按钮文本。文本(字符串)

10

对话框设置负按钮文本

设置警报对话框按钮文本。文本(字符串)

11

对话框设置中性按钮文本

设置警报对话框按钮文本。文本(字符串)

12

对话框设置单选项

这将创建一个单选按钮列表。

13

对话框设置多选项

这将创建一个复选框

14

对话框创建水平进度

创建水平进度对话框。

标题(字符串)(可选)

消息(字符串)(可选)

最大进度(整数)(默认 = 100)

15

对话框创建旋转进度条

创建一个微调进度对话框。

标题(字符串)(可选)

消息(字符串)(可选)

最大进度(整数)(默认 = 100)

16

添加上下文菜单项

将新项目添加到上下文菜单。

label (字符串)此菜单项的标签

event (字符串)将在菜单项单击时生成的事件

eventData(对象)(可选)

17 号

添加选项菜单项

将新项目添加到选项菜单。

label (字符串)此菜单项的标签

event (字符串)将在菜单项单击时生成的事件

eventData(对象)(可选)

图标名称(字符串)

18

网页显示

显示具有给定 URL 的 WebView。

网址(字符串)

wait(布尔)块,直到用户退出 WebView(可选)

19

清除上下文菜单

删除先前添加到上下文菜单中的所有项目。

20

清除选项菜单

删除之前添加到选项菜单中的所有项目

21

制作吐司

创建通知

例子

一个简单的 Toast 示例

import android 
droid = android.Android() 
uname = droid.getInput("Enter your name") 
print uname  
droid.makeToast("Hello %s" %uname.result)

水平进度条

import android 
   droid = android.Android() 
   title = "Progress" 
   str = "Loading..." 
   droid.dialogCreateHorizontalProgress(title,str,100) 
   droid.showDialog() 
	
   for x in range(0,99) 
      time.sleep(0.1) 
      droid.dialogSetCurrentProgress(x) 
		
   droid.dialogDismiss()

模态对话框与非模态对话框

模式对话框或窗口是另一个进程或窗口的子级。对于模式对话框,处理将等待或阻塞,直到用户与新对话框交互。

这种情况的典型示例是警报对话框。在用户执行操作之前,警报不会关闭。

下图是模式对话框的示例。

模态对话框

总而言之,当您在继续执行之前需要用户输入时,请使用模式对话框。

带有 HTML 的 Python GUI

SL4A 支持构建基于 CSS、HTML、JavaScript 和 Python 的图形用户界面 (GUI)。该方法使用 HTML 和 JavaScript 来构建 UI,使用 CSS 来增强 HTML 元素和字体的外观和一致性,并使用 Python 来处理任何其他处理。

以下示例说明了一个基本的 HTML GUI 示例 -

1.语音.html

<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 is your message?</label> 
         <input type = "text" id = "say"/> 
         <input type = "submit" value = "Speak"/> 
      </form> 
   </body> 
	
</html>

2.txtToSpeech.py

import android 
droid = android.Android() 
droid.webViewShow(‘file:///sdcard/sl4a/scripts/Speech.html’) 

while True: 
   result = droid.waitForEvent(‘say’).result 
   droid.ttsSpeak(result[‘data’])

这两个文件 - Speech.html 和 txtToSpeech.py​​ 都必须位于设备上的/sdcard/sl4a/scripts目录中。运行 python 脚本来启动 HTML 文件。

该文件由webViewShow API 调用启动。单击“发言”按钮时会生成该事件。