封装原生控件

Android系统中提供了丰富的控件类型供使用,如TextView,ListView, ScrollView, Button等,我们简称为原生控件,QT4A在Python层也对这些控件的自动化做了封装,以供使用。当然,有时候这些类型还不足以满足用户的需求,用例可以再重载定义新的更为复杂功能更丰富的控件类型,我们简称为自绘控件,这类控件暂不在本篇文档讨论范围内。

控件基本用法

我们知道,一个简单的控件定义如下:

class LoginPanel(Window):
    '''登录界面
    '''
    Activity = 'com.qta.qt4a.demo.MainActivity'  # 登录界面

    def __init__(self, demoapp):
        super(LoginPanel, self).__init__(demoapp)
        self.updateLocator({'acc': {'type': TextView, 'root': self, 'locator': QPath('/Id="account"')}, })

定义完后,在LoginPanel的接口下调用方式如下:

self.Controls['acc']

调用返回的对象的类型是我们定义的type,此处为TextView,再查看TextView类实现的属性和方法,可以看出TextView类下有text属性,那么可以读取text属性:

print (self.Controls['acc'].text)

同时,TextView继承于View类,View实现了click方法,所以又可以调用方法:

self.Controls['acc'].click()

当然,从实现上,acc控件没有实现点击触发逻辑,所以可以根据实际实现调用需要的接口。

样例:EditText类型

我们以帐号控件为例,其类型是EditText:

self.updateLocator({'帐号': {'type': EditText, 'root': self, 'locator': QPath('/Id="editAcc"')}, })

EditText类型的控件通常是一个文本输入框,可以让用户输入文本,从QT4A的实现中,可以看出EditText继承于TextView:

class EditText(TextView):

而TextView中又实现了@text.setter装饰的接口text:

class TextView(View):

 @text.setter
 def text(self, value):

所以对于文本框可以直接赋值:

self.Controls['帐号'].text = "admin"

请注意,在赋值前,QT4A会先关闭软键盘以避免软键盘的干扰,调用了其disable_soft_input接口,所以你执行完用例后,如果发现软键盘无法调出,而你手动又需要使用的话,可以自行在手机设置中切换输入法,则会恢复输入法开启状态或重启手机。

其他类型

其他类型的使用也与上述的TextView、EditText用法类似,各个类型实现的属性和类型不同,只需根据实际调用不同的属性和接口即可。