构建 Linux ARM 设备跨平台 UI 的新方法

使用 AndroidXML 和 TotalCross 的概念验证,为 Raspberry Pi 和其他设备创建 UI 提供了一种更简便的方法。
119 位读者喜欢这篇文章。
Digital images of a computer desktop

Opensource.com

为您的应用程序创建出色的用户体验 (UX) 是一项艰巨的任务,尤其是当您开发嵌入式应用程序时。如今,通常有两种图形用户界面 (GUI) 工具可用于开发嵌入式软件:要么它们涉及复杂的技术,要么它们非常昂贵。

然而,我们为一种新方法创建了一个概念验证 (PoC),该方法使用现有的、成熟的工具为在桌面、移动设备、嵌入式设备和低功耗 Linux ARM 设备上运行的应用程序构建用户界面 (UI)。我们的方法使用 Android Studio 绘制 UI;TotalCross 在设备上渲染 Android XML;一个新的 TotalCross API 称为 KnowCode;以及一个 Raspberry Pi 4 来执行应用程序。

选择 Android Studio

可以使用 TotalCross API 为应用程序构建响应式且美观的 UX,但在 Android Studio 中创建 UI 可以缩短原型设计和实际应用程序之间的时间。

有很多工具可用于为应用程序构建 UI,但 Android Studio 是全球开发人员最常使用的工具。除了被广泛采用之外,这个工具也非常直观易用,并且在创建简单和复杂的应用程序方面都非常强大。在我看来,唯一的缺点是使用该工具所需的计算能力,这比其他集成开发环境 (IDE)(如 VSCode 或其开源替代品 VSCodium)要重得多。

通过考虑这些问题,我们创建了一个概念验证,使用 Android Studio 绘制 UI,并使用 TotalCross 直接在设备上运行 Android XML。

构建 UI

对于我们的 PoC,我们想要创建一个家用电器应用程序来控制温度和其他东西,并且该应用程序将在 Linux ARM 设备上运行。

我们想为 Raspberry Pi 开发我们的应用程序,因此我们使用了 Android 的 ConstraintLayout 来构建一个 848x480(Raspberry Pi 的分辨率)的固定屏幕尺寸 UI,但您可以使用其他布局构建响应式 UI。

Android XML 为 UI 创建增加了很大的灵活性,使其易于为应用程序构建丰富的用户体验。在下面的 XML 中,我们使用了两个主要组件:ImageViewTextView

<ImageView
android:id="@+id/imageView6"
android:layout_width="273dp"
android:layout_height="291dp"
android:background="@drawable/Casa"
tools:layout_editor_absoluteX="109dp"
tools:layout_editor_absoluteY="95dp" />
<TextView
android:id="@+id/insideTempEdit"
android:layout_width="94dp"
android:layout_height="92dp"
android:background="#F5F5F5"
android:text="20"
android:textAlignment="center"
android:gravity="center"
android:textColor="#000000"
android:textSize="67dp"
android:textStyle="bold"
tools:layout_editor_absoluteX="196dp"
tools:layout_editor_absoluteY="246dp" />

TextView 元素用于向用户显示一些数据,例如建筑物内部的温度。大多数 ImageViews 用作用户与 UI 交互的按钮,但它们也需要实现屏幕上组件提供的事件。

与 TotalCross 集成

此 PoC 中的第二项技术是 TotalCross。我们不想在设备上使用任何来自 Android 的东西,因为

  1. 我们的目标是为 Linux ARM 提供出色的 UI。
  2. 我们希望在设备上实现低占用空间。
  3. 我们希望应用程序在计算能力低的低端硬件设备上运行(例如,没有 GPU,低 RAM 等)。

首先,我们使用我们的 VSCode 插件创建了一个空的 TotalCross 项目。接下来,我们将图像的副本保存在 drawable 文件夹中,并将 Android XML 文件的副本保存在 XML 文件夹中——两者都位于 Resources 文件夹中

为了使用 TotalCross Simulator 运行 XML 文件,我们添加了一个名为 KnowCode 的新 TotalCross API 和一个用于加载 XML 的 MainWindow。下面的代码使用该 API 加载和渲染 XML

public void initUI() {
    XmlScreenAbstractLayout xmlCont = XmlScreenFactory.create(“xml / homeApplianceXML.xml”);
    swap(xmlCont);
}

就是这样!只需两个命令,我们就可以使用 TotalCross 运行 Android XML 文件。以下是 XML 在 TotalCross 模拟器上的表现

完成此 PoC 还剩下两件事:添加一些事件以提供用户交互并在 Raspberry Pi 上运行它。

添加事件

KnowCode API 提供了一种通过其 ID (getControlByID) 获取 XML 元素并更改其行为的方法,以执行诸如添加事件、更改可见性等操作。

例如,为了让用户能够更改他们家或其他建筑物中的温度,我们在 UI 底部放置了加号和减号按钮,以及一个“点击”事件,每次单击按钮时,温度都会升高或降低一度

Button plus = (Button) xmlCont.getControlByID("@+id/plus");
Label insideTempLabel = (Label) xmlCont.getControlByID("@+id/insideTempLabel");
plus.addPressListener(new PressListener() {
    @Override
    public void controlPressed(ControlEvent e) {
        try {
            String tempString = insideTempLabel.getText();
            int temp;
            temp = Convert.toInt(tempString);
            insideTempLabel.setText(Convert.toString(++temp));
        } catch (InvalidNumberException e1) {
            e1.printStackTrace();
        }
    }
});

在 Raspberry Pi 4 上测试

最后,最后一步!我们在设备上运行了应用程序并检查了结果。我们只需要打包应用程序并在目标设备上部署和运行它。VNC 也可以用于检查设备上的应用程序。

整个应用程序,包括资源(图像等)、Android XML、TotalCross 和 KnowCode API,在 Linux ARM 上大约为 8MB。

这是应用程序的演示

在此示例中,应用程序仅针对 Linux ARM 打包,但同一个应用程序将作为 Linux 桌面应用程序、Android 设备、Windows、Windows CE 甚至 iOS 运行。

所有示例源代码和项目都可以在 HomeApplianceXML GitHub 存储库中找到。

现有工具带来的新可能性

为嵌入式应用程序创建 GUI 不必像今天这样困难。这个概念验证为如何轻松完成这项任务带来了新的视角——不仅适用于嵌入式系统,而且适用于所有主要的操作系统,所有这些都使用相同的代码库。

我们并非旨在为设计师或开发人员创建构建 UI 应用程序的新工具;我们的目标是为使用已经可用的最佳工具提供新的可能性。

您对这种构建应用程序的新方法有何看法?请在下面的评论中分享您的想法。

接下来阅读
User profile image.
拥有超过 12 年创业经验的企业家,创立了第 4 家公司,在软件开发方面拥有超过 15 年的经验,尤其是在移动应用程序方面。计算机科学硕士学位和创业爱好者,在巴西的创业领域非常活跃。OpenSource 新手,但一直在学习 =P

2 条评论

干得漂亮,Bruno!!!

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.