网格布局 vs 表格布局

39

我正在开发一个预订引擎的安卓应用,类似于航空公司的预订系统。为了获取所有符合乘客搜索条件的航空公司的内容,这些内容将显示在手机屏幕上。

考虑到屏幕加载时间、系统内存消耗和附加功能,表格布局和网格布局哪个更有效?

7个回答

35

注:截至 API 级别 14,Android 终于有了 GridLayout;请参见下面的答案。此外,V7 支持库向下兼容到 API 7 的 GridLayout 支持。但是,本回答对 GridView 的描述仍然精准且表述清晰。

如果您指的是 GridView,那么TableLayout和GridView是完全不同的东西。

GridView基本上像ListView一样,但其项目是按严格的网格排列的。它附加到一个适配器,并在用户滚动时从适配器中检索视图。网格中的所有元素必须具有相同的大小。用户可以通过每个项目移动可见的选择器——GridLayout的目标是显示来自适配器的数据,并使用户能够导航和选择每个显示的项。与ListView唯一的区别是将项目放入网格中而不是垂直列表中。

TableLayout只是一种布局管理器,有点像HTML中的表格。它本身不会滚动;要拥有可滚动的内容,必须将TableLayout放入ScrollView中。这意味着您要显示的所有数据都必须预先填充到TableLayout中,以便ScrollView知道它要滚动的总空间。它也不会直接为您提供每个“项目”的选择或交互,因为TableLayout没有项目,它只是一个布局管理器。

您实际上没有提供足够有用的信息来推荐使用什么。这在很大程度上取决于您想要什么具体内容。

我指的是在“其他功能”方面有用的东西!?那你需要什么功能!

无论如何,通常情况下,如果用户需要滚动查看大量数据,则应使用基于适配器的视图;相较于事先创建整个视图层次结构以显示数据,这种方式更加高效。它们也是唯一能自动提供每个项目选择和其他类似功能的视图。应用程序主要使用的此类视图是 ListView,但也可以使用 GridView。

76
自从API Level 14(冰激凌三明治)开始,就有了一个名为GridLayout的布局管理器。 - Ranhiru Jude Cooray
7
API LEVEL 14支持网格布局和间隔布局。请查看此链接 http://android-developers.blogspot.in/2011/11/new-layout-widgets-space-and-gridlayout.html - bapatla
5
V7(API Level 7 - 2.1)安卓支持库具有GridLayout布局。 - Pork 'n' Bunny

22
自 Android 4.0 开始,有一种名为 GridLayout 的东西。GridLayout 总是优先于 TableLayout。它提供了 TableLayout 已有的所有功能,并且可以替代其他布局。这看起来很酷,而且谷歌希望它像 LinearLayout 一样受欢迎(根据他们在 Android 4.0 视频中的介绍)。

编辑:如果您需要展示大量的项目,请考虑使用RecyclerView和GridLayoutManager。这可以帮助减少内存和CPU使用。


@ToolmakerSteve 这个问题是关于拥有网格布局视图的,但当时还没有这个功能,所以当它可用时,我写了一个解决方案来解决他的问题。当然,如果有大量项目要显示,使用带有GridLayoutManager的RecyclerView会更合适(这也是后来添加的)。TableLayout几乎从不被使用,因为它的行为奇怪且使用起来很烦人。 - android developer

10

TableLayout 的配置通常很容易适应,因为 GridLayout 支持行和列跨度。不需要 TableRows,因为在 GridLayout 中它们是不必要的。对于相同的 UI,GridLayout 通常比 TableLayout 更快,占用更少的内存。

TableLayout 可以在所有 Android 版本上使用,而 GridLayout 需要级别 11 (Android ICS 4.0)或更高版本,但可以通过 support librarry v7 轻松添加以支持级别 7(Android 2.1)或更高版本。


4
这是一个漂亮的GridLayout演示,还概述了与TableLayout的区别: http://blog.stylingandroid.com/archives/669 然而,最重要的区别之一是它仅适用于ICS(Ice Cream Sandwich)及更高版本。目前,市场份额不到30%,因此对于大多数开发人员来说,答案是:在使用GridLayout之前等待几年。当然,你的情况可能有所不同。 市场份额

2
它被添加到了V7支持库中。 - Pork 'n' Bunny
1
链接http://blog.stylingandroid.com/archives/669已经失效。@johndodo如果您知道更新后的链接,编辑将不胜感激。 - Moiz Tankiwala
1
我已经将链接更改为Web存档。请注意,您也可以自行更改,感谢您指出这一点。 - johndodo
2016年更新:由于GridLayout是V7支持库的一部分,任何使用支持库的Android 2.1或更高版本都可以使用它。这现在覆盖了99.9%的Android设备。 - ToolmakerSteve

2

我认为GridView应该更好地工作,因为它是通过视图回收和继承自AbsListView来实现的。虽然使用Adapter来部署GridView会更加困难,但如果您需要加载大量重视图(例如图片),它将更加高效。


0
在网格布局中,组件可以通过设置numcolumns="autofit"自动适应视图。在这里,我们不需要设置所需的行数和列数,但在表格布局中,我们没有这样的选项,必须设置所需的行数和列数。 在表格布局中,如果不使用相对布局,我们无法在一行中插入多个项目。

-3

我认为TableLayout更容易使用。对于GridLayout,您需要构建自定义适配器等内容,这会导致应用程序更加复杂。

在查看不同的屏幕大小时,GridLayout将根据内容自动选择好的列数和行数,并且在添加项目方面更加灵活。

此外,GridLayout更加灵活,但制作起来需要更多的工作。


8
这个回答被评为-1,因为它完全是错误的。GridLayout不需要适配器...你可能在想GridView....这里是GridLayout的文档链接:https://developer.android.com/reference/android/widget/GridLayout.html - Justin

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