2017-08-12 96 views
0

我有,我已经写了三个应用程序(+变化)的客户端本身的iOS,安卓和Windows 10,现在我正在考虑以某种方式巩固应用,以减少努力维护和更新应用程序。我考虑过很多不同的方法,现在我正在考虑使用XML的方法。我希望从尝试类似方法的人以及他们的经历中得到一些反馈。建议多平台应用程序

首先,我已经排除了C++,因为我做整合的应用程序不包含吨逻辑。它会创建太多开销代码以使其有用。他们主要是展示从网络服务下载内容的应用程序。其次,我也排除了大部分跨平台工具(PhoneGap和类似工具),因为我的客户希望使用最新的本地功能以本地语言编写应用程序(这使得他们可以检查更多当苹果,或谷歌过来给我的客户,让他们更多的特色机会)。我知道像Xamarin一样存在经过充分测试的跨平台解决方案。但我担心必须解决这些平台的缺点。例如,客户端设计团队有一些像素纳粹,所以我需要对布局有绝对的控制权。我不想打这个系统。

所以我的想法已经写UI(这是大多数应用程序的肉)的XML。下面是一些示例

<define-component name="button"> <visualstate condition="aspect-ratio less-than 1.5 and width less-than 500pt"> <stack orientation="horizontal"> <image source="$source" accessibility-index="1"/> <label text="$title" accessibility-index="2"/> <visualstate/> <visualstate condition="aspect-ratio greater-than-equal 1.5"> ... <visualstate/> ... </define-component>

<screen id="main-menu"> <visualstate condition="@portrait"/> <component name="button" source="button.png" title="Example Button"/> </screen>

它让我递归定义轻松处理不同的纵横比的视觉状态。它也允许我递归地定义组件。例如,我可以使用参数定义XML中的按钮组件。然后,我可以定义一个使用该按钮组件的特定导航按钮组件。这使我可以保留定义屏幕的主要XML非常简短。客户需要的另一件事是易于处理可访问性(和排序),这对于内置到XML中是很方便的。

我也想过增加一个独立的XML文档,其中可能包括基本功能,因此,即使是代码可以在XML中指定(该应用程序是很容易的)。

所以我的问题是,看起来像一个完全徒劳无功,或者已经人以同样的方式接近了多平台的问题?

同样,我的目标是减少工作,而不是更多。我意识到引入一个XML规范会引入很多工作。无论是指定一个合适的验证模式,还是简单地使用该语言编写UI。我只是试图在使用像我上面描述的自定义系统的应用程序中推广代码/ UI的成本与本机维护许多不同代码库的成本之间找到一个很好的平衡点。

回答

3

所以,它听起来就像你可能已经驳回了Xamarin形式的选择,但我会强烈建议您使用它,因为它听起来完全像你描述。 对于Xamarin和任何跨平台解决方案总是有点耻辱,但它已经成为跨平台开发的优秀产品。 Xaml是一个非常强大的XML UI +数据绑定语言,易于使用。 您还可以使用本机渲染器和“效果”,它们允许您从本机平台级别创建/修改视图,这意味着您可以使用完整的本机框架使其“像素完美”,如果对于某些因为便携式视图并没有完全削减它。 我在所有3个主要的本地平台上花费了大量时间,即使在我工作的非常重要的UI应用程序上,我也非常满意Xamarin Forms。无论如何,它现在都是免费的,只要一试。

+0

我喜欢你的帖子,我一直在想更多。但是如果我想要做一些奇特的效果,就像在屏幕之间进行转换一样。我觉得如果我编写自己的UI引擎,我完全可以控制。无论嵌套的XML元素,都可以放在一个单独的UIView中,这样我就可以完成整个转换(我的客户最有可能感兴趣的部分),如放大按钮或将按钮变形为下一个屏幕的标题等。另外,我希望这个系统还能工作几年。如果我控制引擎,这不成问题,但对于Xamarin来说,需求可能会改变,从而产生额外的工作。 –

+0

我也喜欢直接在XML中添加定义自定义组件和可视化状态。在Xamarin中是如此容易做到的(没有引入额外的本地代码)? –

+1

当然,这是xaml的主要吸引力 - 灵活性。当然,您必须阅读文档和教程才能真正获得完整范围,但以下是几个快速示例的参考: 自定义布局/控件:https://developer.xamarin.com/guides/ xamarin-forms/user-interface/layouts/custom/ 基本触发器(类似于视觉状态):https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/triggers/ – Ackerbar