4

我一直在尝试为 Iphone 和 Android 创建一个用于中级应用程序的代码库。(4 个选项卡、多个窗口、地图等)使用 itanium 2.1 API。但是,我发现 Android 平台上的东西不像在 Iphone 上那样顺利或心甘情愿地工作,尤其是 tableviews 和 UI 元素。Android 上的 UI 响应速度也很慢。厨房水槽的例子非常简单。我正在寻找一个企业级应用程序,该应用程序必须至少在未来几年内维护。有没有人在类似的平台上工作过,并成功地从 SAME 代码库创建功能齐全的 iOS 和 Android 应用程序?

4

2 回答 2

4

我使用编译时 CommonJS 机制获得了很大的成功,该机制拥有一个根视图,然后具有特定于操作系统的功能。

例如,我的独立于操作系统的视图可能是ui/MyView.js

var createAddButton = require("ui/MyView.AddButton");

var MyView = function() {
    var self = Ti.UI.createWindow();
    createAddButton(self, function() { alert('ADD!'); });
    return self;
};

module.exports = MyView;

然后,我创建特定于操作系统的函数来处理它:

iphone/ui/MyView.AddButton.js

module.exports = function(view, addHandler) {
    var addButton = Titanium.UI.createButton({
        systemButton: Titanium.UI.iPhone.SystemButton.ADD
    });

    addButton.addEventListener("click", addHandler);

    view.rightNavButton = addButton;
};

android/ui/MyView.AddButton.js

module.exports = function(view, addHandler) {
    view.activity.onCreateOptionsMenu = function(e){
        var menuItem = e.menu.add({ title: "Add" });
        menuItem.addEventListener("click", addHandler);
    }; 
};

他们实现的 CommonJS 系统将选择适当版本的MyView.AddButton.js,以便将按钮添加到正确的位置。它允许大多数视图是相同的,但特定于操作系统的东西可以正确分离。

于 2012-09-24T17:22:37.713 回答
3

Titanium 并不适用于所有人的 1 个代码库。你确实需要为每个操作系统重写东西。然而,一些应用程序开发人员声称已经重用了 95% 的代码。所以只有 5% 的代码是特定于操作系统的。但我确信他们的代码充满了 if-else。

我建议做的是能够正确维护它,而无需成千上万的 if-else 构造,是构建一个后端核心,并专门为每个操作系统的 UI 相关事务编写代码。这样,您就有了一些适用于 Android 的 UI 相关代码、适用于 iOS 的 UI 相关代码和 1 个适用于两者的核心。

由于 Android 和 iOS 差异很大,编写一个单一的代码库将确保您永远不会使用操作系统特定的功能(如 android 硬件菜单按钮或 iOS NavigationGroup),并且会让 UI 看起来不直观。

于 2012-09-24T13:51:26.790 回答