SL4A - 构建GUI



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

与SL4A进行用户交互主要有两种基本方法:

  • 对话框,例如警报

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

本章解释这两种方法。

基于Python对话框的GUI

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

序号 UiFacade函数和说明
1

dialogGetInput

查询用户的文本输入。

title (字符串) 输入框的标题(默认值 = Value)

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

defaultText (字符串) 插入输入框的文本(可选)

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

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

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

10

dialogSetNegativeButtonText

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

11

dialogSetNeutralButtonText

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

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()

模态与非模态对话框

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

此案例的一个典型示例是警报对话框。在用户执行操作之前,警报不会关闭。

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

Modal Dialog Box

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

使用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按钮时会生成事件。

广告