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

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

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

Solutions Collecting From Web of "最佳实践:Android上的布局(程序化与XML)"

我几乎在每个应用程序的每个片段和活动上使用XML布局。 我很less看到任何需要dynamic创build视图,configurationListViews,显示/隐藏视图等需要做的代码。 对我来说XML的好处是:

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

我想不出有什么好的理由把我所有的布局变成代码 – 这听起来像是地狱。

我期望你的布局看起来不一样的原因是因为你的XML没有正确定义布局。 请记住,Android工具将XML布局转换为代码,因此使用XML布局与dynamic不存在固有的问题 – 最终都以代码forms出现。

OckhamsRazor,

答案很大程度上取决于您的需求,灵活性和知识。 首先要了解的是,每个布局,无论是通过XML或编程创build的可以调整具体或使其符合许多屏幕通过属性。

…以某种方式总是发现自己诉诸Java代码,以构build布局。 在专业的开发环境中,这是可以接受的吗?

是的。 Android使这些可用,所以你可以做到这一点。 但是,通过XMLpipe理布局的好处包括标准的MVC隔离,更简单的debugging以及更容易修改资源的时间(如果需要的话)。 此外,您可以根据设备configuration轻松维护布局的多个副本。

…有没有人真的能够开发纯粹使用XML文件的复杂视图的应用程序?

绝对! 有一些惊人的程序,充分利用XML而不是程序化的意见。 他们的关键是父视图需要多less信息(这是非标准的视图属性)。 即使在这种情况下,只要知道在哪里以及如何操作,就可以通过这些信息。

还是我做错了什么?

我不这么认为。 老实说,我根据需要运行两种方式。 我想说这真的归结于你对这些怪癖的了解。 但工作完成工作。 这里有一个例子:有些时候,我不知道在设备上运行之前,所有的东西都需要什么东西,有时我会让设备符合我的布局的需求。 最终,我使用下面的图表来作出我的决定。

  • 除了视图属性之外,还需要父视图中的信息吗?
  • 我是否需要独立dynamic调整多个元素的大小?
  • 视图types是预先确定还是会改变?

如果答案中的三分之二是“是”,我将使用一定程度的布局。 如果没有,我会去纯XML。 这就是说,编程是鼓励独创性(提供它是安全的),几乎任何事情都可以通过任何方式来完成的行业之一。 最终,我会说做任何事情,使您的工作,使质量的应用程序更容易。

Google根据自己对软件程序员的知识和他们的一般做法提出build议。 他们也创造了这个平台,让他们知道哪些事情在哪些方面得到了优化。 关于经验的一切,我们都有自己的经验。 如果您在使用XML时遇到困难,那么值得花时间去弄清楚这些怪癖,以便它成为另一个可以利用的工具。 此外,它会给你你自己需要回答这个问题的信息。

总结一下:我可以巧克力更好,但如果你喜欢香草,你会不同意。 要意识到每个方法的缺点和好处,并花时间学习如何用这两种方法完成相同的任务。 它会使你成为一个更好的程序员,让你更好地了解何时使用哪种技术。

希望这可以帮助,

FuzzicalLogic

我通常在高度可定制的UI上做很多工作,其中大部分需要在代码中完成。 这就是说,只要有可能,我尝试使用布局片段和膨胀他们,所以作为UI部分添加,删除,或重新排列我还只是做一些布局,而不是全部。

这就是说,通过代码进行布局并不困难。 它的最大好处是编译时检查。 我会以比使用预览窗格更快的速度发现问题。 预览窗格对于初始布局可能很好,但我使用层次结构查看器来查明为什么我的布局看起来不正确。

这真的取决于它是什么types的项目,或项目的一部分,你是什么types的程序员。 有些人只是喜欢纯代码,而另一些人喜欢尽可能多地倾听其他devise工具。

XML肯定有一些好处,比如能够快速切换界面devise。 对于重复的特定devise主题,对于大多数程序员来说绝对有用。

我个人比较喜欢用编程的方式来做所有的事情,而且我的开发比编写XML,使用我创build的库和类更快。 XML更快捷。

至于表演,实际上没有什么值得一提的地方,除非你重复地使用同样的观点,同时,它不再适合屏幕上的许多倍。 我做了一个testing,Android可以在Android 4.4上显示多less文本视图,而且它不能超过5000,但是从来没有这个目的。 如果你在那个时候,你需要dynamic加载和卸载数据,或者只是做一些非常错误的开始。

所以学习它的双方,一定要了解你的编程风格的优点和缺点,因为没有正确的答案给每个人,放松,玩得开心。

分离布局并将其放入xml文件会更好。 我偶尔不得不调整代码中的布局,但它总是一个例外,只有当我确定它不能在布局.xml中完成。 如果正确使用布局视图,则应用程序在所有设备上应该看起来非常相似。