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

所需视图:
android - ListView中的Android TableLayout,神秘列缩小-LMLPHP

但是,有时代表列的视图包含其文本内容,如下所示。

android - ListView中的Android TableLayout,神秘列缩小-LMLPHP

搜索了一会儿之后,我遇到了following discussion on the Android Google Group。作为响应,我在TableLayout中设置了android:stretchColumns="*",瞧,其中包含的TextViews停止了神秘地包装其文本的操作。

这是布局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指出“列的宽度由该列中具有最宽单元格的行定义”。但是,如果是这样,为什么列的大小首先明显缩小,导致文本换行?

有人有很好的解释吗?

最佳答案

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

关于android - ListView中的Android TableLayout,神秘列缩小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4917134/

10-10 09:47
查看更多