【发布时间】:2011-10-28 15:56:35
【问题描述】:
我正在开发一个预订引擎 Android 应用程序,例如航空公司预订系统。为了获取特定于乘客搜索的所有可用航空公司的内容,然后将其显示在移动设备的屏幕上。
考虑到屏幕加载时间、系统内存消耗和其他功能,表格布局或网格布局哪一个更有效?
【问题讨论】:
标签: android tablelayout grid-layout
我正在开发一个预订引擎 Android 应用程序,例如航空公司预订系统。为了获取特定于乘客搜索的所有可用航空公司的内容,然后将其显示在移动设备的屏幕上。
考虑到屏幕加载时间、系统内存消耗和其他功能,表格布局或网格布局哪一个更有效?
【问题讨论】:
标签: android tablelayout grid-layout
我认为 TableLayout 会更易于使用。对于 GridLayout,您需要构建自定义适配器等,这会导致应用程序更加复杂。
在不同的sceensizes下,GridLayout会根据内容自行选择好列数和行数,添加item会更灵活。
GridLayout 也会更加灵活,但需要做更多的工作。
【讨论】:
我认为GridView 应该工作得更好,因为它是通过视图回收和继承自AbsListView 的东西来实现的。 GridView 更难部署,因为您必须与 Adapter 一起使用,但如果您需要加载大量重视图(例如图像),它将有效地工作
【讨论】:
**编辑:写此答案时此行是正确的,但不再适用于所有 Android 设备的 99.9% 以上:There is no GridLayout in the Android API. **
(注意:从 API 级别 14 开始,终于有了 GridLayout;请参阅下面的答案。此外,V7 支持库将 GridLayout 支持添加到 API 7。但是,此答案对 GridView 的描述仍然准确并且说得很好。)
如果你的意思是 GridView,TableLayout 和 GridView 是完全不同的东西。
GridView 基本上类似于 ListView,但其项目以严格的网格排列。它附加到适配器,并从适配器中检索视图,让用户滚动浏览它。网格中的所有元素必须大小相同。用户可以通过每个项目移动一个可见的选择器—— GridLayout 的目标是显示来自适配器的数据并让用户导航和选择每个显示的项目。与 ListView 的唯一区别是项目被放置在网格中而不是垂直列表中。
TableLayout 只是一个布局管理器,有点像 HTML 中的表格。它本身不做任何滚动;要让某些东西滚动,您必须将 TableLayout 放在 ScrollView 中。这意味着您显示的所有数据必须预先填充到 TableLayout 中,因此 ScrollView 知道要滚动的总空间。它也不会直接为您提供每个“项目”的选择或交互,因为TableLayout 没有项目,它只是一个布局管理器。
您实际上并没有提供足够有用的信息来说明您实际尝试做的事情,以便任何人推荐使用什么。这在很大程度上取决于您具体想要什么。
我的意思是在“附加功能”方面会有什么用处?!?那么你在寻找什么功能!
无论如何,作为一般规则,基于适配器的视图应该用于用户正在滚动视图的大量数据的任何情况;这比必须预先创建整个视图层次结构来显示数据要高效得多。它们也是唯一自动提供按项目选择和其他此类功能的产品。应用程序使用的主要视图是 ListView,但也可以使用 GridView。
【讨论】:
从android 4.0开始,就有了GridLayout这样的东西。 GridLayout 总是比 TableLayout 更可取。它提供了您在 TableLayout 上已有的所有内容,并且也可以替换其他布局。
看起来很酷,而且 Google 似乎希望它像 LinearLayout 一样受欢迎(根据他们的 Android 4.0 视频)。
编辑:如果您必须显示很多项目,请考虑将 RecyclerView 与 GridLayoutManager 一起使用。这有助于降低内存和 CPU 使用率。
【讨论】:
这是一个很好的 GridLayout 演示,它还概述了与 TableLayout 相比的差异: http://blog.stylingandroid.com/archives/669
然而,最重要的区别之一是它仅适用于 ICS(冰淇淋三明治)和更新版本。这目前意味着不到 30% 的 market share,所以对于大多数开发人员来说,答案是:等几年再使用 GridLayout。当然是 YMMV。
【讨论】:
在网格布局中,组件可以通过 numcolumns="autofit" 自动设置为视图。在这里我们不需要设置我们需要多少行和列,但是在表格布局中,我们没有这种选项,我们必须设置我们需要多少行和列。 在表格布局中,如果不使用相对布局,我们不能在一行中插入超过 1 个项目
【讨论】:
TableLayout 配置通常很简单 适应,因为 GridLayout 支持行和列跨越。 可以删除 TableRows,因为 GridLayout 不需要它们。为了 相同的 UI,GridLayout 通常会更快并且花费更少 内存比 TableLayout 好。
所有android版本都支持TableLayout,而GridLayout需要11级(Android ICS 4.0)或更高版本,但可以通过支持库v7轻松添加以支持7级(Android 2.1)或更高版本
【讨论】: