AndroidXML和TotalCross的使用提供了一种为RaspberryPi和其他设备创建UI的更简单方法。为应用程序创建良好的用户体验(UX)是一项艰巨的任务,尤其是在开发嵌入式应用程序时。今天,有两种类型的图形用户界面(GUI)工具常用于开发嵌入式软件:它们要么涉及复杂的技术,要么非常昂贵。然而,我们已经创建了一个概念验证(PoC),它提供了一种新方法,可以将现有的、经过验证的工具用于在桌面、移动、嵌入式设备和低功耗ARM设备上运行的应用程序。构建用户界面(UI)。我们的做法是使用AndroidStudio来绘制UI;使用TotalCross在设备上呈现AndroidXML;使用一个名为KnowCode的新TotalCrossAPI;并使用RaspberryPi4来执行应用程序。选择AndroidStudio可以让您使用TotalCrossAPI为您的应用构建美观且响应迅速的用户体验,但在AndroidStudio中创建UI可以缩短原型设计和实际应用之间的时间。有许多工具可用于为应用程序构建UI,但AndroidStudio是全世界开发人员使用最多的工具。除了被大量采用之外,该工具使用起来非常直观,并且对于创建简单和复杂的应用程序都非常强大。在我看来,唯一的缺点是使用该工具所需的计算机能力,它比VSCode或其开源替代品VSCodium等其他集成开发环境(IDE)庞大得多。考虑到这些问题,我们创建了一个概念证明,使用AndroidStudio绘制UI并使用TotalCross直接在设备上运行AndroidXML。构建UI对于我们的PoC,我们想要创建一个家用电器应用程序来控制温度和其他东西,并在LinuxARM设备上运行它。控制恒温器的家电应用程序我们想为树莓派开发我们的应用程序,所以我们使用Android的ConstraintLayout构建一个848x480(树莓派的分辨率)的固定屏幕尺寸UI,但您可以使用其他布局来构建响应性UI。AndroidXML为UI创建增加了很多灵活性,可以轻松地为应用程序构建丰富的用户体验。在下面的XML中,我们使用了两个主要组件:ImageView和TextView。TextView元素用于给用户展示一些数据,比如建筑物内部的温度。大多数ImageView用作用户与UI交互的按钮,但它们还需要实现屏幕上组件提供的事件。与TotalCross集成此PoC中的第二项技术是TotalCross。我们不想在设备上使用任何Android,因为:1.我们的目标是为LinuxARM提供出色的UI。2.我们希望在设备上实现低占用空间。3.我们希望应用程序运行在计算能力低的低端硬件设备上(例如没有GPU、低RAM等)。首先,我们使用VSCode插件创建了一个空的TotalCross项目。接下来,我们在drawable文件夹中保存了图像的副本,在xml文件夹中保存了AndroidXML文件的副本,它们都位于resources文件夹中:HomeAppliancefilestructure为了使用TotalCross运行XML文件模拟器,我们添加了一个名为KnowCode的新TotalCrossAPI和一个用于加载XML的主窗口。以下代码使用API加载和呈现XML:publicvoidinitUI(){XmlScreenAbstractLayoutxmlCont=XmlScreenFactory.create("xml/homeApplianceXML.xml");交换(xmlCont);}就是这样!只需两个命令,我们就可以使用TotalCross运行AndroidXML文件。以下是XML在TotalCross模拟器上的执行方式:TotalCross模拟器运行温度应用程序要完成此PoC,还需要做两件事:添加一些事件以提供用户交互,并在RaspberryPi上运行它。添加事件KnowCodeAPI提供了一种通过ID(getControlByID)获取XML元素并更改其行为(如添加事件、更改可见性等)的方法。例如,为了让用户能够改变他们家或其他建筑物的温度,我们在UI的底部放置了加号和减号按钮,每次单击按钮时,都会发生“单击”事件,从而使温度增减一次:Buttonplus=(Button)xmlCont.getControlByID("@+id/plus");LabelinsideTempLabel=(Label)xmlCont.getControlByID("@+id/insideTempLabel");plus.addPressListener(newPressListener(){@OverridepublicvoidcontrolPressed(ControlEvente){try{StringtempString=insideTempLabel.getText();inttemp;temp=Convert.toInt(tempString);insideTempLabel.setText(Convert.toString(++temp));}catch(InvalidNumberExceptione1){e1.printStackTrace();}}});在RaspberryPi4上测试最后一步!我们在一台设备上运行应用程序并检查结果。我们只需要将应用程序打包,在目标设备上部署运行即可。VNC还可用于检查设备上的应用程序。整个应用程序,包括资源(图像等)、AndroidXML、TotalCross和KnowcodeAPI,在LinuxARM上大约为8MB。以下是该应用程序的演示:应用程序演示在这种情况下,该应用程序仅针对LinuxARM打包,但同一应用程序可以作为Linux桌面应用程序在Android设备、Windows、WindowsCE甚至iOS上运行。所有示例源代码和项目都可以在HomeApplianceXMLGitHub存储库中找到。现有工具的新玩法为嵌入式应用程序创建GUI并不需要像现在这样困难。这个概念证明为如何轻松完成这项任务提供了新的思路,不仅适用于嵌入式系统,而且适用于所有主要操作系统,所有这些操作系统都使用相同的代码库。我们的目标不是为设计人员或开发人员创建一个新的工具来构建UI应用程序;我们的目标是提供使用现有最佳工具的新方法。