【问题标题】:Android TableLayout in a ListView, mysterious column shrinkingListView中的Android TableLayout,神秘的列收缩
【发布时间】:2011-06-22 11:23:11
【问题描述】:

我在 ListView 中使用 TableLayout。我呈现的数据本质上是表格的,TableLayout 似乎是确保列按需要排列的好方法。这种方法在大多数情况下都很有效 - 见下文。

所需视图:

但有时代表列的视图会包裹它们的文本内容,如下所示。

搜索了一会后,我发现了following discussion on the Android Google Group。作为回应,我在 TableLayout 中设置了android:stretchColumns="*",瞧,包含的 TextView 停止了神秘地包装它们的文本。

这是布局 XML 的部分内容,其中的更改用注释突出显示:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:stretchColumns="*">  <!-- stretchColumns needed to prevent
              TableLayout from unilaterally deciding to shrink the column
              width and thereby causing text to wrap. -->

虽然我现在得到了想要的结果,但我有点困惑为什么这会“解决”我的问题。 TableLayout documentation 声明“列的宽度由该列中单元格最宽的行定义。”但如果这是真的,为什么一开始列明显缩小导致文本换行?

谁有好的解释?

【问题讨论】:

    标签: android text tablelayout android-tablet-layout


    【解决方案1】:

    容器向它们的子容器查询他们想要多少空间,并且这个过程递归地继续。任何动态大小的布局框架都将以这种方式工作。从内到外,孩子们向他们的父母报告他们想要的大小,然后在第二次通过时,父母向他们的孩子报告他们有多少可用空间。当它们不包含在stretchColumns 列表中时(显式地通过位置,或隐式地通过通配符,如示例中),它们要求最低限度,在TextView 的情况下是显示包装文本所需的最小空间。当它们包含在stretchColumns 列表中时,它们会报告显示全部内容所需的宽度,如果合适,它们不会被包裹。任何请求的空间超过他们可用空间的人都会得到包装的文本。我想优先级是按照从最少空间到最多所需空间的顺序排列的,所以如果你有stretchColumns="*",最大的文本块首先被包装(如果需要),其他人都可以正常显示。

    【讨论】:

      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      相关资源
      最近更新 更多