【问题标题】:Advantage of using single TableLayout instead of multiple LinearLayouts as TableRow extends LinearLayout only使用单个 TableLayout 而不是多个 LinearLayout 的优势,因为 TableRow 仅扩展了 LinearLayout
【发布时间】:2016-12-21 20:52:49
【问题描述】:

我的列表视图项目由三列和三行组成。我使用了TableLayout。列之间的空间不均匀,但我通过设置边距来管理。现在布局看起来很完美。

<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>

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

那么,使用单个 TableLayout 而不是多个 LinearLayout 的优势是什么,因为 TableRow 只扩展了 LinearLayout?

【问题讨论】:

  • 你考虑过 RecyclerView 吗?我认为它会给你最大的灵活性和最好的性能,特别是如果你有很长的清单。
  • @Shaishav 我只是在等待更多的答案或 cmets.. 无论如何我会接受它..
  • @Vladmir Jovanovic 是的,现在我只使用 recyclerview..

标签: android android-layout android-linearlayout tablelayout


【解决方案1】:

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

如果你用可怕的 utils 部分制作自己的表格,那么它可能会运行得更慢,但它不是游戏,差异将是微不足道的。

TLDR:优点是使用 TableLayout 代替多个 LinearLayout 很方便

【讨论】:

    【解决方案2】:

    这取决于您的目标。 是的,TableLayout 从 LinearLayout 扩展而来。但是在 TableLayout 中有更多 LinearLayout 没有的功能。所以如果你的需求满足一些现有实现的功能,你可以减少你的代码直接使用。

    TableLayout

    列的宽度由单元格最宽的行定义 那一栏。但是,TableLayout 可以将某些列指定为 通过调用 setColumnShrinkable()setColumnStretchable()。如果标记为可收缩,列宽可以 缩小以使表格适合其父对象。如果标记为 可拉伸,它可以扩大宽度以适应任何额外的空间。总数 表格的宽度由其父容器定义。这很重要 请记住,一列既可以收缩也可以拉伸。在 在这种情况下,该列将更改其大小以始终用完 可用空间,但永远不会更多。最后,您可以隐藏一列 调用 setColumnCollapsed()

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

    【讨论】:

      【解决方案3】:

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

      嗯,你可以通过LinearLayout 实现一切,你可以从TableLayout 获得它,就像extends LinearLayout 一样。

      那么,TableLayout 的目的是什么?

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

      第二个区别是TableLayout中引入的方法 setColumnShrinkable(), setColumnStretchable(), setColumnCollapsed()等。看Documentation

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

      示例

      TableLayout 与 LinearLayout 相比更有用。

      当您需要以下内容时,请考虑一个场景:Full Detail Question

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

      rightText 必须始终出现在屏幕上leftText 旁边,无论leftText 的大小如何。你不能仅仅通过LinearLayout XML 文件来实现某些东西(如果你使用 weight 属性,它会在左右文本之间添加不希望输出的空格。)

      您可以通过在TableLayout 中使用android:shrinkColumns 轻松实现这一点(check accepted answer in above mention question) 但是对于LinearLayout,您必须进行一些编程,XML 不能单独工作。 Look here for code

      我想您现在已经清楚以上两个Layouts 之间的区别了。

      请记住,在性能方面 LinearLayout 更好,因为 TableLayout 呈现更多 UI 视图并扩展了更多方法。那么你 只有在需要行列行为时才应使用TableLayout

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多