使用单个 TableLayout 而不是多个 LinearLayouts 的优势,因为 TableRow 仅扩展 LinearLayout

Advantage of using single TableLayout instead of multiple LinearLayouts as TableRow extends LinearLayout only

我的列表视图项目由三列和三个 rows.I 使用 TableLayout 用于 it.The space 列之间不统一,但我通过设置 margins.Now 布局看起来完美。

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/dp18"
    android:paddingLeft="@dimen/dp16"
    android:paddingTop="@dimen/dp18"
    android:stretchColumns="0,1,2">
    <TableRow>
        ..
    </TableRow>
    <TableRow>
        ..
    </TableRow>
    <TableRow>
        ..
    </TableRow>
</TableLayout>

但我想知道理想的方法是什么?如果我使用了四个 LinearLayout(一个外部水平线性布局和三个内部垂直线性布局用于三列),在优化和性能方面会有什么不同。由于 TableRow 扩展了 LinearLayout 然后间接地我只使用了 LinearLayout。

那么,当 TableRow 仅扩展 LinearLayout 时,使用单个 TableLayout 而不是多个 LinearLayout 的优势是什么?

我认为这与性能或优化无关,而是与创建表的便捷方式有关。 TableLayout 和 TableRow 就像每个实用程序 class。这不是必需的,但很好,因为它提供了几个有用的功能(如 layout_column)。

如果你自己制作 Table 带有糟糕的 utils 部分那么它可能会运行得更慢,但这不是游戏,差异将是微不足道的。

TLDR:优点是方便使用 TableLayout 而不是多个 LinearLayout

这取决于你的objective。 是的,TableLayout 继承自 LinearLayout。但是在 TableLayout 中有更多 LinearLayout 没有的特性。所以如果你的需求满足一些已经实现的功能,你可以减少你的代码直接使用。

TableLayout

The width of a column is defined by the row with the widest cell in that column. However, a TableLayout can specify certain columns as shrinkable or stretchable by calling setColumnShrinkable() or setColumnStretchable(). If marked as shrinkable, the column width can be shrunk to fit the table into its parent object. If marked as stretchable, it can expand in width to fit any extra space. The total width of the table is defined by its parent container. It is important to remember that a column can be both shrinkable and stretchable. In such a situation, the column will change its size to always use up the available space, but never more. Finally, you can hide a column by calling setColumnCollapsed().

总而言之,如果您可以在不使用 TabLayout 的情况下完成设计布局,这也是降低 UI 渲染性能的好方法,因为 TabLayout 包含一些您不会使用的特性或功能。

TableLayout 是有利的还是 LinearLayout 取决于您需要的应​​用程序和布局。

好吧,你可以通过 LinearLayout 实现一切,你可以从 TableLayout 获得它 extends LinearLayout

So, what’s the purpose of TableLayout?

显然,它提供了更大的灵活性,因为您可以将布局子项安排到 行和列 中。因此,视图看起来更有条理。 通过 LinearLayout 和它的 属性 像 weight, orientation, margin, padding 等实现这样的事情真的很累。

第二个区别是方法 setColumnShrinkable(), setColumnStretchable(), setColumnCollapsed()等在TableLayout中介绍。看看Documentation

同样,这些方法有助于组织视图,您可以 跨列/单元格 ,就像在 HTML 中一样.

Example

Where TableLayout is useful compare to LinearLayout.

当您需要如下内容时,请考虑一个场景:

|img|leftText|rightText|                ||(end of screen)
|img|leftTextMedium|rightText|          ||
|img|leftTextTooLongSoTrunc...|rightText||

rightText 必须始终出现在 leftText 旁边的屏幕上,无论 leftText 的大小如何。你不能仅仅通过 LinearLayout XML 文件 来实现某些东西(如果你使用权重 属性 它将在左右文本之间添加 space 这是不想要输出。)

您可以通过在 TableLayout () but for LinearLayout you have to do some programming, XML won't works alone.

中使用 android:shrinkColumns 轻松实现此目的

我想你现在已经清楚以上两者之间的区别了Layouts

Keep in mind that performance wise LinearLayout is better because TableLayout render more UI views and extends more methods. So, you should use TableLayout only when you require Row-Column behavior.