1

我认为这个问题的答案可能很简单,但我很挣扎......

我有一个包含多列的 TableLayout。我希望最后一列具有固定宽度,但我想定义该宽度以便能够容纳程序中最宽的字符串。即它总是足够宽以包含“此字符串”而不会包装或浪费任何空间。

我想这样做,因为我在 ListView 中有这些 TableLayouts,所以当最后一列的宽度可变时,它看起来很差。

我尝试获取字符串宽度,甚至将其放入 TextView,在所有适当的 TextView 上调用 getTextSize() 然后 setWidth()。我遇到的问题是 gettextSize() 返回像素,但 setWidth 使用 ScaledPixels。

我确信有一个非常简单的解决方案。任何人都可以帮忙吗?

4

1 回答 1

4

您是否在 XML 布局中使用 android:width="wrap_content" 来定义最后一列的宽度?

编辑:我想我刚刚明白,您有一个列表视图,其中包含一个表格,并且您希望列表视图的所有行对于表格的最后一行具有相同的长度。正确的?

我现在只能想到一个非常不雅的解决方案,它涉及在构建列表视图之前检查所有字符串。

一般逻辑如下:

我假设您从数组中获取所有字符串,我们将其称为数据。

建立一个全局浮点变量来表示您拥有的最长字符串,我们称之为 maxLength。

在您的布局中创建一个不可见的文本视图(让我们称之为不可见文本),您可以通过设置来做到这一点

android:visibility="gone"

然后:

int size = data.length;
maxLength = 0.0f;
for(int i = 0;i<size;i++){
   invisibleText.setText(data[i]);
   float thisLength = invisibleText.getTextSize();
   if(thisLength>maxLength) maxLength = thisLength;
}

在您的列表视图构造函数中:

TextView text = (TextView)findViewById(R.id.the_text_view_you_want);
text.setText(data[position]);
text.setWidth(maxLength)

表格列应该使用 android:width="wrap_content" 我没有测试这段代码,但它应该可以工作,我之前做过类似的事情。

于 2010-10-18T21:55:42.757 回答