SL4A - 构建 GUI
图形用户界面 (GUI) 表示一组图形组件,使用户能够浏览、访问和与应用程序功能交互。
用户与 SL4A 交互有两种基本方法,即 −
对话框,例如 警报。
使用 HTML 和 JavaScript 构建 UI,然后在后台使用 Python 处理任何其他处理。
本章介绍了这两种方法。
基于 Python 对话框的 GUI
SL4A 包含一个 UI 外观,用于访问 android API 提供的基本 UI 元素。这些函数在调用时会将结果对象作为命名元组返回。每个结果都分配有一个唯一的 ID,以便进行跟踪。第二个元素是结果。它代表用户的输入。该元组还包括第三个元素 error,用于向调用者提供有关可能遇到的任何错误情况的反馈。如果没有遇到任何错误,则此元素设置为 None。
S.No. | UiFacade 函数和说明 |
---|---|
1 | dialogGetInput 查询用户的文本输入。 title (String) 输入框的标题(默认值 = Value) message (String) 在输入框上方显示的消息(默认值 = 请输入值:) defaultText (String) 插入输入框的文本(可选) 结果是用户的输入,如果点击取消,则为 None (null)。 |
2 | dialogShow 显示对话框 |
3 | dialogCreateAlert 创建警报对话框。 title(字符串)(可选) message(字符串)(可选) |
4 | dialogDismiss 关闭对话框。 |
5 | dialogCreateDatePicker 创建日期选择器对话框。 year(整数)(默认值 = 1970) month(整数)(默认值 = 1) day (整数) (默认值 = 1) |
6 | dialogCreateTimePicker 创建时间选择器对话框。 hour (整数) (默认值 = 0) minute (整数) (默认值 = 0) is24hour (布尔值) 使用 24 小时制 (默认值 = false) |
7 | dialogGetPassword 向用户查询密码。 title (字符串) 密码框的标题 (默认值 =密码) message(字符串)在输入框上方显示的消息(默认值 = 请输入密码:) |
8 | dialogGetResponse 返回对话框响应。 |
9 | dialogSetPositiveButtonText 设置警报对话框正按钮文本。文本(字符串) |
10 | dialogSetNegativeButtonText 设置警报对话框按钮文本。文本(字符串) |
11 | dialogSetNeutralButtonText 设置警报对话框按钮文本。文本(字符串) |
12 | dialogSetSingleChoiceItems 这将创建一个单选按钮列表。 |
13 | dialogSetMultiChoiceItems 这将创建一个复选框 |
14 | dialogCreateHorizontalProgress 创建一个水平进度对话框。 title(字符串)(可选) message(字符串)(可选) 最大进度(整数)(默认值 = 100) |
15 | dialogCreateSpinnerProgress 创建旋转进度对话框。 title(字符串)(可选) message(字符串)(可选) 最大进度(整数)(默认值 = 100) |
16 | addContexMenuItem 向上下文菜单添加新项。 label(字符串)此菜单项的标签 event(字符串)单击菜单项时将生成的事件 eventData(对象) (可选) |
17 | addOptionsMenuItem 向选项菜单添加新项。 label(字符串)此菜单项的标签 event(字符串)菜单项点击时将生成的事件 eventData(对象)(可选) iconName(字符串) |
18 | webViewShow 使用给定的 URL 显示 WebView。 url(字符串) wait(布尔值)阻止直到用户退出 WebView (可选) |
19 | clearContextMenu 删除之前添加到上下文菜单的所有项目。 |
20 | clearOptionsMenu 删除之前添加到选项菜单的所有项目 |
21 | makeToast 创建通知 |
示例
一个简单的 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. Speech.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 调用启动。单击 Speak 按钮时会生成事件。