【问题标题】:Android - fix TextView width by stringAndroid - 通过字符串修复 TextView 宽度
【发布时间】:2010-10-18 21:39:04
【问题描述】:

我觉得这个问题的答案大概就是这么简单,但是我在苦苦挣扎……

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

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

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

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

【问题讨论】:

    标签: android string width textview pixels


    【解决方案1】:

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

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

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

    一般逻辑如下:

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

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

    在你的布局中创建一个不可见的文本视图(我们称之为 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" 我没有测试这段代码,但它应该可以工作,我以前做过类似的事情。

    【讨论】:

    • 是的,我在最后一列使用 android:width="wrap_content",是的,我确实希望表的最后一行在 listView 的所有条目中具有相同的长度,并且想要该宽度足以容纳应用程序中定义的最大长度字符串。
    • 在答案中添加了一些东西。试试看。
    猜你喜欢
    • 2018-12-25
    • 2015-06-26
    • 1970-01-01
    • 2015-04-14
    • 2017-11-21
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多