最佳实践:Android上的布局(程序化与XML)

时间:2012-03-22 17:52:53

标签: android

这个问题一直困扰着我。我已经在Android平台上开发了几个应用程序,不知何故总是发现自己使用Java代码来构建布局。在专业的开发环境中,这是可以接受的吗?或者XML文件应该是首选方法?我经常发现XML是一种更乏味的方法,而且这些布局在所有设备上看起来都不一样。我只是不明白。从专业角度来看,是否有人真正能够开发纯粹使用XML文件的复杂视图的应用程序?这个问题让我感到害怕,因为Google推荐使用XML,但除非以编程方式完成,否则UI在所有设备上看起来都不一样。或者我做错了什么?

请注意,我指的是大多数用户使用的Android 2.2和2.3。

5 个答案:

答案 0 :(得分:36)

我在我编写的每个应用程序的几乎每个片段和活动上使用XML布局。我很少看到任何需要动态创建视图,ListViews的配置,显示/隐藏视图等需要在代码中执行。对我来说,XML的优点是:

  • 能够使用布局编辑器(Eclipse)
  • 更容易预览布局
  • 可能受益于布局的自动本地化
  • 轻松维护差异设备(屏幕)的不同并行布局
  • 通过查看(比代码更容易)可以了解布局
  • 轻松将布局分解为碎片(碎片,包括等)以消除重复
  • 在视觉设计及其背后的功能之间保持分离

我想不出把所有布局都放到代码中的任何好理由 - 听起来像是地狱。

我希望你的布局看起来不一样是因为你的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中完成时。如果正确使用布局视图,应用程序应该在所有设备上看起来非常相似。