我应该膨胀布局还是通过编程创建它?

15

关于Android编程,

这个问题已经困扰我一段时间了,我应该尽可能地放大布局还是尽可能地以编程方式创建布局?

如果我们不考虑"方便",哪种更好?更快?更安全?任何具体的建议都将不胜感激。

此致敬礼,


1
通常情况下,您应该尽可能预定义(并在运行时扩展)布局。这样做的好处是将 UI 与应用程序逻辑分离。此外,您可以使用图形布局视图而无需运行模拟器(有例外情况,比如未填充的 ListView 等)。 - Tadas S
1
我理解你的意思,但我想知道的是,假设我们忽略编码的便利性,并且假设我们在代码中完全将UI与应用逻辑分离,并且代码易于理解和清晰,那么哪种方式更快、更好,是填充布局还是编写布局? - LuckyMe
5
在官方的Android源代码中,布局是用XML定义的,并在运行时进行填充。我认为,如果你以编程方式构建布局,那么这并不是一种清晰的做法。同时,你还会失去在XML布局预览器中获取UI预览的能力。 - dannyroa
1
@LuckyMe 在运行时增加视图在用户需要根据点击事件或滚动事件添加视图时非常有用,也就是说当活动不会因为用户操作而改变时。如果任何用户操作导致活动的更改,则应仅在xml中创建视图。这是我一直在实施的更好的做法。 - Chintan Soni
5
膨胀布局比代码布局更容易、更快捷、更易于维护、更易读、可重用,并具有更好的视图/控制器分离。代码中的布局从来不易读,大多数情况下会使层次结构不可见,此外还会添加大量额外的代码。 - njzk2
我明白了,所以展开(inflating)是谷歌/Android推荐和传统的布局方式,它不会显著降低应用程序的运行速度。因为我在Android开发者网站上读到,它是一个缓慢的过程,在采取展开之前应尽可能“重用”视图。 - LuckyMe
1个回答

38
我了解了,因此扩充是Google / Android推荐和传统的布局方式。
是的。
它与在Java中自行完成相同的工作相比,并不会使应用程序的运行时间明显变慢。
在AdapterView中回收视图-您最有可能阅读到该建议的地方-很重要,因为与创建视图相比,回收视图更快,而不管如何创建这些视图。再次强调,不是对比填充(inflation)和编写自己的Java代码,而是填充和不创建新视图之间的比较。
请填充。
充气考虑资源集(例如,基于屏幕大小和方向的不同布局),充气考虑样式的覆盖,充气与工具协同工作得更好。
可能有一些场景硬编码Java比填充更快,就像某些情况下硬编码汇编语言比C更快一样。在大多数情况下,速度差异不足以证明烦恼。
在这个背景下,我不知道您认为"安全"是什么意思。

感谢您详细的回复,只有一个问题,关于“与在Java中自己完成相同工作相比”,您是指编码布局的执行速度会比通货膨胀慢,而不是说代码编写时间,而是代码执行时间。非常感谢。 - LuckyMe
1
@LuckyMe:我所有的时间参考都是相对于执行时间的。 - CommonsWare
4
我刚遇到了一些屏幕变慢的问题 - 我正在将一些半复杂的视图添加到可滚动的编程界面中。将其转换为充气布局并使用findviewbyid来更改文本值,在这种情况下明显更快。只是想为任何其他也有同样疑问的人提供这个建议。 - CurlyPaul
@CurlyPaul:感谢您的建议;我正准备尝试相反的方法(从充气到编程创建布局),以提高执行速度。 - SMBiggs
一如既往的出色和非常有帮助的回答。谢谢。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接