Android - 按字符串修复TextView宽度

时间:2010-10-18 21:39:05

标签: android string width textview pixels

我认为这个问题的答案可能很简单,但我正在努力......

我有一个包含多列的TableLayout。我希望最后一列具有固定宽度,但我想定义该宽度,以便能够从我的程序中保存尽可能宽的字符串。即它总是宽到足以包含“这条绳子”而没有包裹或浪费任何空间。

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

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

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

1 个答案:

答案 0 :(得分:4)

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

编辑:我想我只是理解,你有一个列表视图,它包含一个表,你希望列表视图的所有行对于表的最后一行具有相同的长度。正确?

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

一般逻辑如下:

我要假设你从数组中获取字符串,我们称之为数据。

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

在布局中创建一个看不见的textview(让我们称之为invisibleText),你可以通过设置

来做到这一点
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” 我没有测试这段代码,但它应该可以工作,我之前做过类似的事情。