这个问题一直困扰着我。我已经在Android平台上开发了几个应用程序,不知何故总是发现自己使用Java代码来构建布局。在专业的开发环境中,这是可以接受的吗?或者XML文件应该是首选方法?我经常发现XML是一种更乏味的方法,而且这些布局在所有设备上看起来都不一样。我只是不明白。从专业角度来看,是否有人真正能够开发纯粹使用XML文件的复杂视图的应用程序?这个问题让我感到害怕,因为Google推荐使用XML,但除非以编程方式完成,否则UI在所有设备上看起来都不一样。或者我做错了什么?
请注意,我指的是大多数用户使用的Android 2.2和2.3。
答案 0 :(得分:36)
我在我编写的每个应用程序的几乎每个片段和活动上使用XML布局。我很少看到任何需要动态创建视图,ListViews的配置,显示/隐藏视图等需要在代码中执行。对我来说,XML的优点是:
我想不出把所有布局都放到代码中的任何好理由 - 听起来像是地狱。
我希望你的布局看起来不一样是因为你的XML没有正确定义布局。请记住,Android工具将XML布局转换为代码,因此使用XML布局与动态布局没有固有的问题 - 最终都会成为代码。
答案 1 :(得分:16)
OckhamsRazor,
答案非常在很大程度上取决于您的需求,灵活性和知识。首先要理解的是,无论是通过XML创建还是以编程方式创建的每个布局都可以通过属性进行特定调整,或者通过属性与多个屏幕保持一致。
...并且不知何故总是发现自己使用Java代码来构建布局。在专业的开发环境中,这是否可以接受?
是的,确实如此。 Android使这些可用,所以你可以做到这一点。但是,通过XML管理布局的好处包括标准的MVC隔离,更简单的调试,以及在需要时更容易修改资源。此外,您可以轻松维护多个布局副本,具体取决于设备配置。
...有没有人真正能够开发纯粹使用XML文件的复杂视图的应用程序?
绝对!有一些令人惊讶的程序可以充分利用XML而不是程序化视图。它们的关键是父母视图需要多少信息(即非标准视图属性)。即使在这些情况下,如果您知道在何处以及如何操作,也可以通过该信息。
或者我做错了什么?
我不这么认为。老实说,我根据需要运行两种方式。我要说这真的归结为你对这些怪癖缺乏了解。但的工作可以完成工作。这是一个例子:有些时候我不知道在设备上运行之前需要做多大的事情,有时我会让设备符合我的布局需求。最后,我使用下面的图表来做出我的决定。
如果对其中3个中的2个的回答为“是”,我将使用某种程度的编程布局。如果没有,我将使用纯XML。话虽如此,编程是鼓励创造力的职业之一(如果它是安全的),几乎任何事情都可以通过多种方式完成。最终,我会说,做任何事情都会让你的工作变得更容易。
Google根据自己对软件程序员及其常规做法的了解提出建议。他们还创建了平台,因此他们知道哪些方面以哪种方式进行了优化。这完全取决于经验,我们都有自己的经验。如果您在使用XML时遇到问题,那么值得花些时间来弄清楚这个怪癖,以便它是另一种可以利用的工具。此外,它将为您提供您所需的信息,以便您自己回答这个问题。
总结一下:我可以说巧克力更好,但如果你喜欢香草,你会不同意。请注意每种方法的缺点和好处,并花时间学习如何使用这两种方法完成相同的任务。它会让你成为一个更好的程序员,让你更好地了解何时使用哪种技术。
希望这有帮助,
FuzzicalLogic
答案 2 :(得分:7)
我通常会使用高度可自定义的UI做很多工作,其中很大一部分 需要 在代码中完成。话虽这么说,我尽可能尝试使用布局片段并对它们进行充气,因此在添加,删除或重新布置UI部分时,我仍然只是在做一些布局,而不是全部布局。
话虽如此,通过代码进行布局并不难。它的最大优点是编译时检查。我会发现问题比使用预览窗格更快。预览窗格可以很好地用于初始布局,但我使用层次结构查看器来确定我的布局看起来不正确的原因。
答案 3 :(得分:3)
这实际上取决于它是什么类型的项目,或项目的一部分,以及你是什么类型的程序员。有些人更喜欢纯粹的代码,而有些人则喜欢尽可能多地使用其他工具进行设计。
XML肯定有一些好处,比如能够快速切换界面设计。对于重复的特定设计主题,对大多数程序员来说绝对有用。
我个人更喜欢以编程方式完成所有工作,而且开发比使用我创建的库和类编写XML更快。 XML可以更快地开箱即用。
至于性能,确实没有什么区别值得一提,除非你重复使用相同的视图,同时,它不再适合屏幕多次折叠。我测试了Android可以在Moto X-Android 4.4上呈现多少文本视图,并且它不能超过5000,但是从来没有目的。如果您在那时,您需要动态加载和卸载数据,或者只是做一些非常错误的事情。
所以学习它的两面,绝对要了解你的编程风格的优缺点,因为没有正确的答案给每个人,放松,玩得开心。
答案 4 :(得分:0)
将布局分开并将其放入xml文件中要好得多。我偶尔必须在代码中调整布局,但它总是一个例外,只有当我确定它不能在布局.xml中完成时。如果正确使用布局视图,应用程序应该在所有设备上看起来非常相似。